【发布时间】:2014-02-27 05:26:36
【问题描述】:
我有一个脚本我想同时运行2个程序,一个是ac程序,另一个是cpulimit,我想先用“&”在后台启动C程序,然后得到PID C 程序并将其交给 cpulimit,cpulimit 也将使用“&”在后台运行。
我尝试在下面这样做,它只是启动第一个程序,从不启动 cpulimit。
我也在 Arch linux 中使用 systemd 作为启动脚本以 root 身份运行它。
#!/bin/bash
/myprogram &
PID=$!
cpulimit -z -p $PID -l 75 &
exit 0
【问题讨论】:
-
sleep 30 & PID=$! sleep $PID & ps -f适合我。 -
我认为 $!是最后执行命令的 id,通过使用变量 PID,我可以访问该值吗?
-
是的,在我的代码输出中(缺少换行符)有两个分叉进程。第一个是 sleep 30,第二个是 sleep 17568,它与第一个 sleep 的 pid 匹配。也许你的 myprogram 是一个分叉另一个进程的 shell?
-
您可能想要选择不同的变量名称。
MY_PID=$! -
cpulimit是做什么的?这听起来像是完成得相当快的事情,所以它可能在后台运行并在启动脚本完成后您可以检查它之前退出。
标签: linux bash shell sh systemd