linux停多线程里面fork了一个进程,导致有个调用的函数被多调用了一次
linux下多线程里面fork了一个进程,导致有个调用的函数被多调用了一次
linux下多线程里面fork了一个进程,导致有个调用的函数被多调用了一次?
怎么解决?
------解决方案--------------------
fork 之后的代码会被执行两次, 父子各一次.
你不贴码子, 怎么看.
------解决方案--------------------
pid[0]是什么?fork返回的么?
fork调用一次,返回两次,一次是父进程里返回创建的子进程id,另一次是子进程返回0。看贴出的代码,不会调用两次execvp。除非你前面fork就调用了两次
------解决方案--------------------
如果执行成功,就打印ls -l后的内容,只打印一次啊
------解决方案--------------------
linux下多线程里面fork了一个进程,导致有个调用的函数被多调用了一次?
怎么解决?
------解决方案--------------------
fork 之后的代码会被执行两次, 父子各一次.
你不贴码子, 怎么看.
------解决方案--------------------
pid[0]是什么?fork返回的么?
fork调用一次,返回两次,一次是父进程里返回创建的子进程id,另一次是子进程返回0。看贴出的代码,不会调用两次execvp。除非你前面fork就调用了两次
------解决方案--------------------
char* args[100] = {
"ls","-l",NULL
};
int pid = fork();
if(pid == 0)
excevp("ls",args);
如果执行成功,就打印ls -l后的内容,只打印一次啊
------解决方案--------------------
int
main(void)
{
pid_t pid;
if ((pid = fork()) < 0) {
err_sys("fork error");
} else if (pid == 0) { /* specify pathname, specify environment */
if (execle("/home/sar/bin/echoall", "echoall", "myarg1",
"MY ARG2", (char *)0, env_init) < 0)
err_sys("execle error");
}
if (waitpid(pid, NULL, 0) < 0)
err_sys("wait error");
if ((pid = fork()) < 0) {
err_sys("fork error");
} else if (pid == 0) { /* specify filename, inherit environment */
if (execlp("echoall", "echoall", "only 1 arg", (char *)0) < 0)
err_sys("execlp error");
}
exit(0);
}