如何将一系列任务切换到后台?

时间:2013-01-11 07:43:59

标签: shell background-process

我正在远程服务器上运行两个测试,这是我几小时前使用的命令:

% ./test1.sh; ./test2.sh

这两个测试应该一个接一个地运行。如果第二个测试在第一个完成之前运行,那么一切都将破产,我将不得不重新开始整个过程​​。

困境是,这两个任务花费了太多时间来完成,当我准备注销服务器并等待结果时。我不知道如何将它们都切换到后台...如果我使用 Ctrl + Z ,只有第一个任务将被暂停,而第二个任务在擦除当前数据时没有任何用处。

是否可以将它们都切换到后台,保留订单?实际上我应该将这两项任务放在同一个流程组中,例如(./test1.sh; ./test2.sh) &,但遗憾的是,第一次测试已经运行了几个小时,这是非常可惜的重启测试。

一个选项是在它开始之前杀死第二个测试,但有没有任何机制可以解决这个问题?

2 个答案:

答案 0 :(得分:1)

首先将./test2.sh重命名为./test3.sh。然后执行[CTRL+Z],然后执行bgdisown -h。然后保存此脚本(test4.sh):

while :; do
  sleep 5;
  pgrep -f test1.sh &> /dev/null
  if [ $? -ne 0 ]; then
   nohup ./test3.sh &
   break
  fi
done

然后执行:nohup ./test4.sh &

你可以退出。

答案 1 :(得分:0)

首先,screentmux是您的朋友,如果您还没有与他们合作(他们可以让远程机器工作更容易)。

要使用条件连续执行,您可以写:

./test1.sh && ./test2.sh

只有test2.sh返回0才会执行test1.sh(通常意味着:没有错误)。例如:

$ true && echo "first command was successful"
first command was successful

$ ! true && echo "ain't gonna happen"

有关控制运营商的更多信息:http://www.humbug.in/docs/the-linux-training-book/ch08s01.html