我在本地机器上称呼它
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/