shell脚本恢复已停止的进程

时间:2016-11-24 15:52:22

标签: bash unix process resume

我编写了一个shell脚本来恢复所有挂起的进程。 在对命令进行研究之后,这就是我现在所拥有的:

#!/bin/bash
for i in `jobs -sp`; do
  kill -CONT $i
done

但似乎没有发生任何事情......我创建了一个虚拟shell脚本,它永远循环,运行并停止它。运行我的shell脚本后,它将无法恢复。为什么会这样?

2 个答案:

答案 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