编写一段程序,使用系统调用 fork( )创建一个子进程。子进程通过系统调用 exec 系列函数调用命令 ls,调用 exit( )结束。而父进程则调用 waitpid( )等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。
时间: 2024-11-05 22:24:33 浏览: 15
在Unix/Linux系统下,你可以编写如下的C语言程序来实现这个功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
// Fork操作
pid_t child_pid = fork();
if (child_pid == 0) { // 子进程
printf("I am the child process with PID: %d\n", getpid());
execlp("/bin/ls", "ls", NULL); // 执行ls命令
perror("Failed to execute command");
_exit(EXIT_FAILURE);
} else if (child_pid > 0) { // 父进程
printf("Parent process with PID: %d is waiting for child.\n", getpid());
int status;
waitpid(child_pid, &status, 0); // 等待子进程结束
printf("Child process with PID: %d exited with status %d.\n", child_pid, WEXITSTATUS(status));
} else {
printf("Fork failed with error: %d\n", errno);
return -1;
}
return 0;
}
```
在这个程序中,`fork()`函数用于创建子进程,如果返回值为0,则表示当前进程是新创建的子进程;否则,返回值是非零值,表示是原进程。子进程执行`execlp()`系统调用,尝试执行"/bin/ls"命令,替换当前进程。若执行成功,子进程将终止并传递退出状态给父进程。
父进程等待子进程结束,使用`waitpid()`函数,它接收子进程ID和一个指针,用来存储子进程的状态信息。最后,父进程打印出子进程的PID和退出状态。
阅读全文