从c+中确定最后一个背景pid+;应用程序 我有一个嵌入式Linux项目,我在C++中构建。arch是arm,处理器是飞思卡尔imx6
我正在后台使用以下命令运行多个音频文件: sprintf(sysdev,“gst launch playbin2 uri=file://%s audio sink=”“alsasink device=ossmix”“&”,文件名); 然后由以下人员执行:系统(sysdev) 我也尝试过使用execvp 在我读了:$的结果之后 <>这一切在控制台中都很好,但是在C++程序中,$$!没有返回结果。我实际使用:echo$!&>result.dat将结果通过管道传输到程序内读取的文件中。问题是,在程序中,result.dat从未获得数据。。。很明显,这是因为美元!我没有归还任何东西 我猜这与环境有关 首先,我的方法可行吗 我对Linux相当陌生,但我的理解是,我不能“发布”我运行的程序的PID,所以我唯一的选择是在它们发生时找出它们 仅仅扫描ps的结果是不够的,因为我可能会有两个相同的声音运行两次 提前感谢你的智慧。 克里斯 更新: 我让它工作了。我使用了fork(),在child中它只是称为execlp()。 在parent中,我记录了child的PID。从c+中确定最后一个背景pid+;应用程序 我有一个嵌入式Linux项目,我在C++中构建。arch是arm,处理器是飞思卡尔imx6,c,linux,background,arm,pid,C,Linux,Background,Arm,Pid,我正在后台使用以下命令运行多个音频文件: sprintf(sysdev,“gst launch playbin2 uri=file://%s audio sink=”“alsasink device=ossmix”“&”,文件名); 然后由以下人员执行:系统(sysdev) 我也尝试过使用execvp 在我读了:$的结果之后 这一切在控制台中都很好,但是在C++程序中,$$!没有返回结果。我实际使用:echo$!&>result.dat将结果通过管道传输到程序内读取的文件中。问题是,在程序中,r
最后,我创建了一个线程,它使用waitforpid(WNOHANG)监视所有fork的状态,以保持信息更新。
$代码>仅在同一个shell启动程序时才起作用,该程序与您随后在其中计算$的程序相同代码>。system
的每次使用都会调用自己的shell。从手册页面:
system()
通过调用/bin/sh-c command
执行命令中指定的命令,并在命令完成后返回
你在这里使用了错误的方法。相反,请学习使用fork()
和exec
系列中的一个函数,以及wait
。fork()
将为您提供正确的pid。Read;它有一个关于过程的很好的章节。好的,但是因为我都在调用原始的声音播放器和$!在我的程序中,这难道不是同一个外壳吗?关于fork(),我有点担心使用它,因为它会生成我程序的完整内存副本,这似乎会非常累人,尤其是在我的嵌入式系统上运行多个fork。我看错了吗?system
的每次使用都会调用自己的shell。当然,system
确实会用更多的信息来修改这个问题。当然,system
会做一个fork
和execve
的/bin/sh
,但是fork
返回的PID在system
的实现中丢失了。所以我正在研究fork建议,我有几个问题。我的意图是,无论什么方法执行fork中的PLAY(建议是exec()vs system()),都应该立即返回并给出我的PID。当我深入观察时,我发现exec()在正常情况下不会返回。如果进程永不返回,我如何等待它。我立即需要访问所创建进程的PID。