Несколько процессов с одинаковым именем

У меня есть приложение, работающее на Linux 2.6.13 и WindRiver Linux 3.0. В Linux 2.6.13, когда я делаю...

ps -eaf | grep myapplication

... вывод показывает несколько записей «myapplication».

Если я даю ту же команду в WindRiver Linux 3.0, вывод показывает только одну запись «myapplication».

Связана ли разница с разницей в используемой ОС? Подскажите пожалуйста причину этого?


person nitin_cherian    schedule 10.11.2010    source источник


Ответы (4)


Вероятно, это связано с используемой библиотекой потоков и/или версией ядра.

Старая (теперь очень старая) библиотека потоков «Linuxthreads», используемая для отображения каждого потока как процесса «верхнего уровня», который будет отображаться непосредственно в / proc и иметь отдельный PID. Это был один из его многочисленных недостатков, которые были устранены:

Новая (теперь не очень новая) библиотека потоков "NPTL", которая уже много лет включается в каждый новый дистрибутив, может использовать функции ядра, чтобы потоки отображались с одним и тем же PID. Потоки все еще там, но теперь они находятся в подкаталоге «task» в / proc, поэтому «ps» обычно игнорирует их (вы все еще можете видеть их, если хотите, с соответствующей опцией).

Обе библиотеки реализуют API потоков posix (более или менее; более новые делают больше, чем старые). Я ожидаю, что рассматриваемые процессы были многопоточными.

Все еще можно увидеть программы, связанные с потоками Linux, если они были статически связаны давным-давно. Современные ядра прекрасно это поддерживают.

person MarkR    schedule 10.11.2010

Возможно, grep myapplication также указан, и поэтому здесь несколько записей. Если нет, это зависит от того, что делает ваше приложение, возможно, вызывает само себя и т. д. Вам нужно будет предоставить дополнительную информацию или, по крайней мере, ps -eaf | grep myapplication вывод.

person darioo    schedule 10.11.2010

В Linux реализация потока не сильно отличается от полного процесса, см. man clone. Я подозреваю, что вы просто используете две разные команды ps с разными настройками по умолчанию. ps --help покажет вам, как составить список всех потоков каждого процесса.

person MarcH    schedule 10.11.2010
comment
Это немного отличается и зависит от библиотеки потоков, какие флаги она передает в clone(), что влияет на то, как поток отображается для ps и некоторые другие вещи (например, есть ли у него собственный pid) - person MarkR; 10.11.2010

Вы можете использовать «ps -efm», чтобы вывести список связанных с ними процессов и потоков. Некоторые системы показывают потоки с тем же именем, что и исполняемый файл. Там вы увидите, что потоки ядра показаны с "[]".

person udslk    schedule 10.11.2010