int main() { ... if(!fork()) { execvp(cmdName,cmdParam); } printf("In main()..."); return(0); }
假设我已经正确传递了cmdName&cmdParam参数,那么在恢复main()的执行之前,如何等待由execvp创build的进程完成?
execvp()是否创build了一个新的fork()进程的subprocess?
如何确定Linux进程启动的date和时间?
mmap系统调用返回-14(-EFAULT ??)
你能解释这个C代码吗? (创build一个deamon程序)
在Linux上维护长期运行的任务
在父进程中, fork返回子进程的PID,因此可以将其存储在一个变量中,然后使用waitpid来等待子进程终止。
不是真的 – 由fork创建的新子进程是父进程的复制,然后execvp用新映像替换其进程映像。 实际上,你最初有两个“副本”的父母,其中之一,然后“成为”新的程序。
对于你的第一个问题:
使用waitpid(2)像这样:
int pid = fork(); if (!pid) { execvp(cmdName,cmdParam); } waitpid(pid,NULL,0); printf("Resuming main()...n");
如上所述,您需要保存分叉调用的值。 你应该在叉子上使用更多的if。 有三种情况:
0:你是孩子的过程
0:你是父母,并有一个孩子PID回来
-1:发生了一些可怕的事情,叉子失败了
你真的想知道案件3,它会毁了你的一整天。 (也是执行电话)
int main() { int pid = fork(); if(-1 == pid) { fprintf(stderr,"Big problems forking %sn",strerror(errno); exit(-1);//or whatever } else if (0 == pid) { if (-1 == execvp(cmdName,cmdParam)) { //like above,get some output about what happened } } //no need to else here,execvp shouldn't return // if it does you've taken care of it above waitpid(pid,0); printf("Resuming main()..."); }
返回(0); }
您需要存储fork()的返回值,这会向每个可执行文件返回一个不同的值(如果您是父级,则为0),然后您需要执行waitpid
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。