我在本地机器上称呼它

ssh -t   [email protected] -p 10086 'echo $SHELL && pstree'


我得到了/bin/zsh和没有外壳程序的普通pstree输出。

为什么?并且第一个输出是假的吗?

最佳答案

某些外壳程序(例如zsh)不会派生子进程来执行命令行或脚本中的最后一条命令。由于该行或脚本的退出状态与最后一个命令的退出状态相同,因此它们在shell进程中调用exec()而不进行分叉。所以如果执行

sleep 5 && pstree


它将为sleep派生一个孩子,等待其完成,然后调用exec()运行pstree

由于pstree进程替换了外壳程序,因此您不会在进程树中看到该外壳程序。 pstree将是sshd的子级。

如果您将其更改为

pstree && sleep 5


那么您应该在pstree输出中看到该shell,因为pstree不再是最后一个命令。

关于linux - 当通过特定命令使用SSH时,为什么远程主机中没有Shell进程?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55942245/

10-13 09:49