在后台运行作业时,Bash非常冗长:
$ echo toto&
toto
[1] 15922
[1]+ Done echo toto
Run Code Online (Sandbox Code Playgroud)
由于我试图并行运行作业并使用输出,我想找到一种方法来沉默bash.有没有办法删除这个多余的输出?
我有一个脚本我想同时运行2个程序,一个是交流程序,另一个是cpulimit,我想先在后台以"&"启动C程序,然后得到C程序的PID和将它交给cpulimit,它也将在后台以"&"运行.
我尝试在下面这样做,它只是启动第一个程序,永远不会启动cpulimit.
另外,我使用archd中的systemd作为root用户运行它作为启动脚本.
#!/bin/bash
/myprogram &
PID=$!
cpulimit -z -p $PID -l 75 &
exit 0
Run Code Online (Sandbox Code Playgroud) 这似乎是一件非常微不足道的事情,但我很困难.
要在后台执行某些操作,请使用&:
>>> sleep 5 &
[1] 21763
>>> #hit enter
[1]+ Done sleep 5
Run Code Online (Sandbox Code Playgroud)
但有一个.bashrc的来源背景脚本输出作业信息是非常令人沮丧的,所以你可以做这个来解决它:
>>> (sleep 5 &)
Run Code Online (Sandbox Code Playgroud)
好的,所以现在我想获得sleepfor wait或的PID kill.不幸的是它在子shell中运行所以典型的$!方法不起作用:
>>> echo $!
21763
>>> (sleep 5 &)
>>> echo $!
21763 #hasn't changed
Run Code Online (Sandbox Code Playgroud)
所以我想,也许我可以通过这种方式获得子shell来打印它的PID:
>>> sleep 5 & echo $!
[1] 21803 #annoying job-start message (stderr)
21803 #from the echo
Run Code Online (Sandbox Code Playgroud)
但是现在当我在子shell中抛出它时,无论我如何尝试捕获子shell的stdout,它似乎都会阻塞直到sleep完成.
>>> pid=$(sleep 5 & echo $!)
Run Code Online (Sandbox Code Playgroud)
如何在后台运行某些内容,获取其PID并停止打印作业信息和" Done"?
我想监视我将要开始的程序的实时输出.我试图通过将程序的输出重定向到管道,然后从监视脚本中读取管道来实现此目的.
./program >> apipe
Run Code Online (Sandbox Code Playgroud)
然后从监控脚本
cat apipe
Run Code Online (Sandbox Code Playgroud)
但是由于>>中的缓冲区,没有输出.无论如何我可以禁用此缓冲区?我在一个准系统嵌入式系统(petalinux)上运行,因此我无法访问unbuffer,脚本或stdbuf来帮助我.
我已经尝试了另一个平台上的脚本,其中unbuffer可用,它可以正常工作.
我可以用任何方式配置这个缓冲区,或使用另一个二进制文件来重定向?
编辑:我无法访问我尝试运行的命令的源代码.它是传统的二进制文件.