我使用-c
参数在bash中遇到了一些不寻常的行为。
如果我执行以下操作:
bash -c "ping 127.0.0.1 > $HOME/console.log" &
这会启动两个进程bash和ping:
john 18038 17951 0 09:26 pts/14 00:00:00 bash -c ping 127.0.0.1 > /home/john/console.log
john 18039 18038 0 09:26 pts/14 00:00:00 ping 127.0.0.1
从流程层次结构bash
是ping
的父流程。
现在如果我杀了bash:
kill -15 18038
再次检查进程树:
UID PID PPID C STIME TTY TIME CMD
john 17951 30467 0 09:25 pts/14 00:00:00 /bin/bash
john 18039 1 0 09:26 pts/14 00:00:00 ping 127.0.0.1
john 18064 17951 0 09:30 pts/14 00:00:00 ps -f
[1]+ Terminated bash -c "ping 127.0.0.1 > $HOME/console.log"
bash
已被杀死但不是ping
子进程。我当时也希望能够被杀死。
如果我使用ksh –c
重复完全相同的步骤,则会导致ping
进程失效。
看起来bash
执行双叉或其他操作,而ksh
只执行没有fork的执行。