Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从c+中确定最后一个背景pid+;应用程序 我有一个嵌入式Linux项目,我在C++中构建。arch是arm,处理器是飞思卡尔imx6_C_Linux_Background_Arm_Pid - Fatal编程技术网

从c+中确定最后一个背景pid+;应用程序 我有一个嵌入式Linux项目,我在C++中构建。arch是arm,处理器是飞思卡尔imx6

从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

我正在后台使用以下命令运行多个音频文件: 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。
最后,我创建了一个线程,它使用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。