gpt4 book ai didi

c - fork : child does not execute code

转载 作者:太空宇宙 更新时间:2023-11-04 01:30:37 25 4
gpt4 key购买 nike

我尝试通过 fork 启动一个新进程,但有时 child 不执行他的代码。当我启动 ps 时,我可以看到新的 child 。

这就像子进程在评估 if( stream_pid == 0 ) 之前停止或等待。

我该如何解决这个随机问题?

我在 150MHz 的 ARM SoC 上执行这段代码(不知道它是否有帮助 :p )

static void process_thread_func( void )
{
const char *ret = NULL;
char *argv[2];
char *status = NULL;
int stream_pid;
int flag = 0;
int err = 0;

stream_pid = fork();

if( stream_pid == 0 )
{

argv[0] = "/usr/bin/mplayer";
argv[1] = "tv:// -tv driver=v4l2:device=/dev/video0:outfmt=y8:width=320:height=240";
argv[2] = NULL;

err = execv("/usr/bin/mplayer" , argv );

if( err < 0 )
printf("execv failed, reason: %d\n", errno);

}
else if( stream_pid < 0 )
printf("Cannot create mplayer child, reason: %d\n", errno);
else
{
( void )waitpid( stream_pid, &flag, 0 );
}
}

最佳答案

你在 argv 数组的边界之外写,因为你没有声明它足够大。应该是:

char *argv[3];

您可以改用 execl,因为参数是硬编码在程序中的。

err = execl("/usr/bin/mplayer", "/usr/bin/mplayer", "tv:// -tv driver=v4l2:device=/dev/video0:outfmt=y8:width=320:height=240", (char*) NULL);

或者你可以让数组在初始值设定项中自动调整大小:

char *argv[] = {"/usr/bin/mplayer", "tv:// -tv driver=v4l2:device=/dev/video0:outfmt=y8:width=320:height=240", NULL};

关于c - fork : child does not execute code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23127783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com