@HellWalk

Linux: echo $$ возвращает неправильный PID, почему?

Делаю демона на php (демон запускается в скрине), необходимо узнать PID демона непосредственно внутри скрипта.

В Linux, есть команда echo $$, которая возвращает PID текущего процесса.

Пишу в демоне:
// Узнаем PID текущего процесса
        exec("echo $$", $pid);
        echo "PID Демона: $pid[0]\n";


Получаю результат:
5afe8608e0168399846602.png

Но если посмотреть процессы через htop, то процесс имеет другой PID:
5afe8623a3f72878774459.png

При этом номер отображаемый echo $$ всегда на 1 больше, чем PID процесса, отображаемого в htop
Можно, конечно, просто уменьшать отображаемый номер на единицу и работать с ним, но хочется разобраться почему так происходит.
  • Вопрос задан
  • 593 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
echo $$ вам возвращает pid оболочки, которую exec запустил. То что число находится рядом с искомым - совпадение.

Для получения pid'а собственного процесса в php существует соответствующая функция getmypid
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Wexter
Потому что exec запускает его в оболочке
5afe88973d532713241107.png
Ответ написан
Комментировать
@pfg21
ex-турист
включить в htop режим t и посмотреть детей процесса ??
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
Для выполнения "echo $$", exec запускает bash, и следовательно $$ это PID bash процесса.

Вам нужно:
$pid=getmypid();
echo "Process PID $pid"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы