Atualmente, minha máquina tem 5 processos executando scripts por python
, mas o Linux acha que apenas 2 deles têm o nome python
(de acordo com / proc / $ pid / stat). Isto é, pgrep -af python
mostra:
1784 /usr/bin/python -Es /usr/sbin/foo
2306 /usr/bin/python /usr/bin/bar
16964 /usr/bin/python /usr/bin/terminator --geometry=1400x1000
24137 python /home/me/bin/baz.py --arg 70000
25760 python2 -m guake.main
enquanto pgrep -a python
mostra apenas:
24137 python /home/me/bin/baz.py --arg 70000
25760 python2 -m guake.main
Aqui estão os nomes s que o Linux deu a esses processos:
% for pid in $(pgrep -f python); do cut -d' ' -f2 /proc/$pid/stat; done
(foo)
(bar)
(/usr/bin/termin)
(python)
(python2)
Então, como o Linux decide se python
ou o nome do script será o processo nome ? E por que foo
e bar
se tornam o nome quando o processo terminator
obtém o caminho completo?
Eu assumo a maneira de invocação. Eu não sei como esses três programas foram invocados, mas aqui estão seus shebangs:
/usr/sbin/foo: #!/usr/bin/python -Es
/usr/bin/bar: #!/usr/bin/python
/usr/bin/terminator: #!/usr/bin/python
Este foi definitivamente invocado usando o shebang:
/home/me/bin/baz.py: #!/usr/bin/env python
E o Guake é lançado a partir de um script Bash assim:
exec /usr/bin/env python2 -m guake.main "$@" </dev/null >/dev/null 2>&1 &
Meu palpite ingênuo é que /usr/bin/env
faz com que a palavra que o segue se torne o processo nome , mas presumo que exista mais do que apenas isso. (E mesmo se for esse o caso, como atribui esse nome ?)