完善这段代码:#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/wait.h> int main(void){ pid_t a; a = fork(); if (a < 0) { perror("fork failed"); exit(1); } if (a == 0) { execlp ("ps" ,"ps",NULL); execlp ("ls" ,"ls","-al","/etc/passwd ",NULL); return 1; } else { wait(NULL); printf("father exit\n");} return 0; }
时间: 2024-01-20 16:03:08 浏览: 104
这段代码可以通过以下方式完善:
1. 在子进程中使用 `exit(0)` 来结束进程,代替 `return 1`。
2. 在父进程中使用 `WIFEXITED` 和 `WEXITSTATUS` 宏来判断子进程是否正常结束,并获取子进程的返回值。
修改后的代码如下:
```c
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(void){
pid_t a;
a = fork();
if (a < 0) {
perror("fork failed");
exit(1);
}
if (a == 0) {
execlp("ps", "ps", NULL);
execlp("ls", "ls", "-al", "/etc/passwd", NULL);
exit(0);
} else {
int status;
wait(&status);
if (WIFEXITED(status)) {
printf("child process exited with status: %d\n", WEXITSTATUS(status));
}
printf("father exit\n");
}
return 0;
}
```
请注意,`execlp` 函数在执行时,如果成功,则不会返回原进程,因此需要使用 `exit` 函数来结束子进程。
阅读全文