我想写一个脚本来模拟因某种原因被中断的过程。
所以我尝试运行杀死进程的东西 像这样的东西:
ssh -f localhost sleep 7;kill pid
call_function_from_another_script_that_runs_the_process
希望ssh命令因为“-f”而在后台运行,并且由于睡眠,kill命令不会很快执行。 问题是睡眠不会在这里生效。杀戮正在被立即执行。
如果我在没有-f的情况下运行ssh,那么第二行不会被调用,我的进程也不会运行。
请假设第二行如其所说 - 从另一个脚本运行一个函数来运行该过程。我不能“将该功能放在脚本中并运行它”或者改变其他已经写好的东西。
有什么想法吗?
感谢。
答案 0 :(得分:7)
您无需使用ssh
在后台运行某些内容。使用此:
(
sleep 7
kill pid
) &
call_function_from_another_script_that_runs_the_process
注意“&”它将整个子shell放在后台。在子shell中,首先运行sleep
,然后运行kill
。
顺便提一下,示例中kill
命令立即生效的原因是因为该行的脚本有两个命令:“ssh -f localhost sleep 7
”和“kill pid
”,而不是一个命令(“sleep 7;kill pid
”)在SSH会话中。
答案 1 :(得分:1)
尝试引用您的ssh命令,如下所示。如果不引用,则分号标记ssh
命令的结尾,因此在将ssh命令放入后台后立即执行第二个kill
命令。
ssh -f localhost "sleep 7;kill pid"
call_function_from_another_script_that_runs_the_process
答案 2 :(得分:1)
使用&
在后台运行您的流程。
some_long_running_process &
pid=$!
sleep 7
kill ${pid}
完成。