Jon*_*röm 12 bash shell-script background-process
我想启动一个测试,然后稍等片刻,然后使用 shell 脚本启动一个程序:
#!/bin/bash
sleep 3 & # test
sleep 1 # wait some
sleep 4 & # run program under test
fg 1 # <-- I want to put test back in "foreground", but yields "line 5: fg: no job control"
Run Code Online (Sandbox Code Playgroud)
我想我误解了“前景”的意思,但是还有其他方法可以做我想做的事吗?(我尝试使用jobs -x
and前缀nohup
,但我怀疑我的误解更深了。)
And*_*y K 22
您只需要在 shell 中启用作业控制 set -m
#!/bin/bash
set -m
sleep 3 & # test
sleep 1 # wait some
sleep 4 & # run program under test
jobs
fg %1
Run Code Online (Sandbox Code Playgroud)
引用自 bash 手册:
-m
监控模式。作业控制已启用。对于支持它的系统上的交互式 shell,默认情况下启用此选项(请参阅上面的 JOB CONTROL)。后台进程在单独的进程组中运行,并在完成时打印一行包含其退出状态的行。
Kus*_*nda 22
#!/bin/bash
sleep 3 & sleep_pid=$!
sleep 1
sleep 4 &
wait "$sleep_pid"
Run Code Online (Sandbox Code Playgroud)
把它sleep 3
放在前台相当于等待它完成。我假设这是你想要做的(或者至少这是你正在寻找的效果),这就是上面的脚本所做的。它通过将作业的 PID 保存在变量中sleep_pid
,然后在调用wait
.
您还可以使用作业 ID:
#!/bin/bash
sleep 3 &
sleep 1
sleep 4 &
wait %1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1206 次 |
最近记录: |