


fork()函数 用于创建一个与父进程完全相同的子进程。子进程是父进程的副本,拥有自己的地址空间、文件描述符和资源,但共享父进程的部分信息,如打开的文件描述符、环境变量等。fork()函数的原型是pid_t fork(void);,它返回两次,一次在父进程中返回子进程的PID,一次在子进程中返回0。
- #include
- #include
- int main(void)
- {
- pid_t pid;
- pid = fork();
- if (pid < 0){
- printf("fork is error \n");
- return -1;
- }
- //父进程
- if (pid > 0)
- {
- printf("This is parent,parent pid is %d\n", getpid());
- }
- //子进程
- if (pid == 0)
- {
- printf("This is child,child pid is %d,parent pid is %d\n", getpid(), getppid());
- }
- return 0;
- }

exec()函数 在当前进程中执行一个新的程序。它会替换当前进程的代码和数据段,但保留原有的堆和栈。exec()函数的原型是int exec(const char *path, char *const argv[]);,它用于执行一个新的程序。参数path指定要执行的程序路径,参数argv是一个指向字符指针数组的指针,用于传递给新程序的参数。

- #include
- #include
-
- int main() {
- char *argv[] = {"ls", "-l", NULL};
- exec("ls", argv);
- return 0;
- }
exec()函数执行了ls命令,并传递了一个参数-l。
完成后再次输入查找命令“ps aux | grep a.out”,没有发现 3179 号进程。
