pstree
извлекает имя процесса из / proc / / stat
. Это то, что было дано ядру через первый параметр execve (2)
; подробности см. в proc (5)
и Что именно происходит, когда я выполняю файл в своей оболочке? . Из последнего вы увидите, что ядро может запускать сценарии оболочки напрямую (и многие другие «двоичные файлы» - см. Как Mono волшебный? ), но оболочка также вмешивается в некоторые случаи.
Таким образом, если вы запустите
./sleepy.sh
со строкой shebang в начале скрипта, вы увидите sleepy.sh
в выводе pstree
, потому что это то, что оболочка запрашивает запуск ядра. Если вместо этого вы запустите
sh ./sleepy.sh
, вы увидите sh
в выводе pstree
.
ps -f
или ps u
(и pstree -a
) вместо чтения / proc /
, чтобы получить командная строка , которая отличается - это параметр argv
, присвоенный системному вызову execve
. При запуске сценария оболочки с shebang он изменяется, чтобы включить shebang, что, несомненно, почему в вашем случае ps
показывает
/bin/bash ./sleepy.sh
(см. Как запускаются программы для лотов подробнее об этом).