Почему при использовании SSH с определенной командой нет процесса оболочки на удаленном хосте? - PullRequest
0 голосов
/ 01 мая 2019

Я называю это на моей локальной машине

ssh -t   anon@192.168.50.81 -p 10086 'echo $SHELL && pstree'

Я получил /bin/zsh и нормальный вывод pstree без процесса оболочки.

Почему?И является ли первый вывод поддельным?

1 Ответ

1 голос
/ 02 мая 2019

Некоторые оболочки, такие как zsh, не разветвляют дочерний процесс для выполнения последней команды в командной строке или сценарии. Поскольку состояние выхода строки или сценария совпадает со статусом выхода последней команды, они вызывают exec() в процессе оболочки без разветвления. Так что если вы выполните

sleep 5 && pstree

он ответит на sleep дочерним процессом, дождется его завершения, затем вызовет exec() для запуска pstree.

Поскольку процесс pstree заменяет оболочку, вы не видите оболочку в дереве процессов. pstree будет ребенком sshd.

Если вы измените его на

pstree && sleep 5

тогда вы должны увидеть оболочку в выводе pstree, потому что pstree больше не последняя команда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...