我有一个 bash 脚本,它在循环中执行一些并行处理。我不希望并行进程使 CPU 达到峰值,所以我使用了 sleep 命令。这是一个简化版本。
(虽然是真的;睡觉 99999;完成)&
所以我从 bash 提示符执行上面的行并得到类似的东西:
[1] 12345
where[1]
是作业号,12345
是 while 循环的进程 ID (pid)。我做了一个kill 12345
并得到:
[1]+ 终止(虽然为真;做 睡觉99999; 完毕 )
看起来整个脚本被终止了。但是,我做了一个ps aux|grep sleep
,发现 sleep 命令仍然很强大,但有自己的 pid!我可以杀死sleep
,一切似乎都很好。但是,如果我要先终止睡眠,while 循环会启动一个新的sleep
pid。这让我很惊讶,因为睡眠与 while 循环不平行。循环本身是单一的执行路径。
所以我有两个问题:
- 为什么 sleep 命令会得到自己的进程 ID?
- 如何轻松杀死while循环和睡眠?