在通过特定命令使用SSH时,为什么远程主机中没有Shell进程?

时间:2019-05-01 20:21:02

标签: linux ssh

我在本地计算机上称为

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

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

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

1 个答案:

答案 0 :(得分:1)

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

sleep 5 && pstree

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

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

如果将其更改为

pstree && sleep 5

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