我编写了一个shell脚本来恢复所有挂起的进程。 在对命令进行研究之后,这就是我现在所拥有的:
#!/bin/bash
for i in `jobs -sp`; do
kill -CONT $i
done
但似乎没有发生任何事情......我创建了一个虚拟shell脚本,它永远循环,运行并停止它。运行我的shell脚本后,它将无法恢复。为什么会这样?
答案 0 :(得分:0)
您需要使用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)
我正在使用进程替换而不是反引号。
答案 1 :(得分:0)
运行脚本会启动一个子shell,显然没有任何已停止的作业,因为你刚刚启动它。
尝试将代码放入函数中,然后在要继续执行这些作业的shell中运行它。
cont () {
local i
for i in $(jobs -sp); do
kill -CONT $i
done
}
(请注意$(...)
优先于`...`
- 它在这里没有太大的区别,但你应该学会更喜欢现代语法,因为它确实很重要。)
代码非常简单,但将它放在函数中可能没有意义。您可以使用xargs
进一步简化:
jobs -sp | xargs kill -CONT