我在本地计算机上称为
ssh -t anon@192.168.50.81 -p 10086 'echo $SHELL && pstree'
我得到了/bin/zsh
和没有外壳程序的普通pstree输出。
为什么?并且第一个输出是假的吗?
答案 0 :(得分:1)
某些外壳程序,例如zsh
,不会派生子进程来执行命令行或脚本中的最后一条命令。由于该行或脚本的退出状态与最后一个命令的退出状态相同,因此它们在shell进程中调用exec()
而不进行分叉。因此,如果您执行
sleep 5 && pstree
它将为sleep
派生一个孩子,等待其完成,然后调用exec()
运行pstree
。
由于pstree
进程替换了外壳程序,因此您在进程树中看不到该外壳程序。 pstree
将是sshd
的子代。
如果将其更改为
pstree && sleep 5
然后您将在pstree
输出中看到该shell,因为pstree
不再是最后一个命令。