通过 posix_spawn() 运行进程会立即导致进程失效

问题描述 投票:0回答:1

提前谢谢您。

当我尝试通过 bash 启动基于 cli 的音乐播放器时,一切都很好,并且播放器 (mplayer) 使用命令行上传递的简单路径 (/home/pi/Music/*) 工作。

但是,当我通过 posix_spawn() 从另一个应用程序运行同一个播放器时,它似乎立即失效了:

pi        7974  7973 51 21:45 pts/0    00:00:05 [mplayer] <defunct>

我想保留生成的播放器的 pid(这样我可以稍后终止它),但我也不希望父进程等待。

请问我可能缺少什么?

代码如下:

#define PLAYERPATH "/usr/bin/mplayer"

//...
char *argV[] = {PLAYERPATH, "-really-quiet", "-shuffle", "-loop 0", "/home/pi/Music/*", (char *) 0};

我想,我希望 mplayer 应用程序能够简单地开始播放音乐。

posix spawn detach defunct
1个回答
0
投票

我不是完全确定为什么这会产生影响(尽管我很想得到解释),但是造成这种影响的原因不是直接生成 mplayer,而是生成

/bin/sh
并让 it 运行 mplayer如下:

char *argV[] = {"sh", "-c", "/usr/bin/mplayer -nogui -really-quiet -loop 0 -shuffle /home/pi/Music/*.mp3", (char *) 0};

//...

status = posix_spawn(&processID, "/bin/sh", NULL, NULL, argV, environ);

将其留在这里,希望对其他人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.