恢复停止shell脚本处理
问题描述:
我写了一个shell脚本来恢复所有挂起的进程。 对命令的研究,这是我现在:恢复停止shell脚本处理
#!/bin/bash
for i in `jobs -sp`; do
kill -CONT $i
done
但似乎没有任何happend ...我创建了一个循环永远虚拟shell脚本,拼命地跑,并停止它。运行我的shell脚本后,它不会恢复。这是为什么发生?
答
您需要使用set -m
在shell脚本中使用作业控制,见Why can't I use job control in a bash script?
这里是我的解决方案:
set -m
while read i
do
kill -CONT $i
done < <(jobs -sp)
我使用进程替换而不是反引号。
答
运行脚本会启动一个子shell,因为刚刚启动它,显然没有任何停止的作业。
试着把你的代码放入一个函数中,然后在你要继续这些工作的shell中运行它。
cont() {
local i
for i in $(jobs -sp); do
kill -CONT $i
done
}
(注意为$(...)
将优先于`...`
- 它没有很大的差异在这里,但是你应该学会喜欢的时候的确很重要的现代语法)。
代码虽然很简单,但将它放入函数中可能没有意义。您可以进一步简化:xargs
:
jobs -sp | xargs kill -CONT
他们是否在等待标准输入?他们为什么被暂停?运行'jobs -l'。 – Jdamian
这个虚拟程序被暂停,因为我称为kill -STOP。编辑我的问题包括这一点。 –