, а
не получает собственный PID, потому что это ключевое слово оболочки, а не внешняя команда. Вы получите PID, указанный как процесс bash
. Чтобы получить PID, вставьте echo $$
в цикл while
и используйте ps aux | grep '[b] ash'
для соответствия PID.
Если какая-либо команда не является встроенной оболочкой, вы можете получить PID обычным способом, например. используя ps
, pgrep
. В поле PPID (ID родительского процесса) вы обычно видите PID оболочки, на которой он запущен.
Например. чтобы получить подробную информацию о команде foobar
внутри цикла оболочки, вы можете выполнить:
ps -ef | grep '[f] oobar'
или
ps aux | grep '[f] oobar'
или pgrep
:
pgrep 'foobar'
Поскольку будет запущено более одного процесса оболочки, вам следует пойти на многословие и проверить поле PPID, чтобы соответствовать PID оболочки.
Обратите внимание, что во время цикла доступность любого процесса в таблице процессов будет зависеть от времени, в течение которого он выполняется, и от того, когда вы проверяете таблицу процессов.