我正在尝试编写一个函数作为我的代码的一部分,以便用户可以键入
shell> run date //Line of user input
Mon Jan 19 11:51:57 EST 2009 //Printed by program
shell: process 348 exited normally with status 0
用户只需键入“运行日期”,程序就会显示底部的两行。 到目前为止,这就是我的功能。
else if(strcmp(argv[1],"run") == 0 ) {
if ((pid = fork()) < 0) { //Child process fork
perror("fork");
exit(1);
}
//printf("ok");
if (pid == 0) { //Child executes code
execvp(argv[2], &argv[2]);
exit(1);
}
waitpid(atoi(argv[2]), &status, WNOHANG);
printf("shell: run status is %d\n", status);
}
这还没有产生,但我想知道到目前为止这是否正确,如果我错过了一个重要的部分!谢谢。
答案 0 :(得分:4)
waitpid
的第一个参数应该是孩子的PID。另请注意,WNOHANG选项可防止调用进程被阻止;因此,如果预期进程的状态信息不可用,waitpid
将返回0。如果您想等到孩子终止,请使用0
作为waitpid
的第三个参数(或使用wait
代替waitpid
)。