在 Linux 中创建子进程要使用 fork()函数,执行新的命令要使用 exec()系列函数,等待子进
程结束使用 wait()函数,结束终止进程使用 exit()函数。
fork()原型如下:pid_t fork(void);
fork 建立一个子进程,父进程继续运行,子进程在同样的位置执行同样的程序。对于父进程,
fork()返回子进程的 pid, 对于子进程,fork()返回 0。出错时返回-1。
子进程执行新任务
任务要求:编写一段程序,使用系统调用 fork()创建一个子进程。子进程通过系统调用 exec更换自己原有的执行代码,转去执行 Linux 命令/bin/ls (显示当前目录的列表),然后调用 exit()函数结束。父进程则调用 waitpid()等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid;
/* fork a child process */
pid = fork();
if (pid < 0) {
/* error occurred */
fprintf(stderr, "Fork Failed");
return 1;
} else if (pid == 0) {
/* 子进程 */
execlp("/bin/ls","ls",NULL);///调用/bin目录下的ls命令,ls命令的参数为空(NULL)
} else { /* 父进程 */
/* 父进程将一直等待,直到子进程运行完毕*/
wait(NULL);
printf("Child Complete");
}
return 0;
}