我正在努力弄清楚如何将所有这些东西组合在一起。例如,使用以下脚本:
#!/bin/bash
. script1
./script2
. script3 &
./script4 &
sleep 5
PID 是什么样子的?什么是单独进程,什么不是?后台进程和子 shell 一样吗?
答案1
. script1
-- 不是一个单独的进程;script1 在当前的壳。参见help .
./script2
-- 就像调用任何外部命令一样,分叉一个新进程并等待完成
. script3 &
——是的,一个单独的过程。例如:
$ cat script3
sleep 300
$ . script3 &
[1] 15136
$ echo $$
15102
$ ps -ef | grep $$
jackman 15102 32659 0 09:43 pts/0 00:00:00 bash
jackman 15136 15102 0 09:44 pts/0 00:00:00 bash
jackman 15157 15102 0 09:44 pts/0 00:00:00 ps -ef
jackman 15158 15102 0 09:44 pts/0 00:00:00 grep --color=auto 15102
请参阅 bash 手册,命令列表:
如果命令以控制运算符“&”终止,则 shell 会在子 shell 中异步执行该命令。
./script4 &
——是的,一个单独的过程。