进程创建常用函数 | 小牛学习日记
进程创建常用函数
Published in:2025-02-23 | category: C++
Words: 578 | Reading time: 2min | reading:

进程创建常用函数

fork

fork() 系统调用的主要功能是创建一个新的进程,这个新进程被称为子进程,而调用 fork() 的进程则被称为父进程。子进程是父进程的一个副本,它会复制父进程的大部分状态,包括内存空间、文件描述符、程序计数器等。

1
2
3
#include <unistd.h>

pid_t fork(void);

在父进程中:fork() 调用会返回子进程的进程 ID(PID),这是一个正整数。通过这个 PID,父进程可以对特定的子进程进行管理,比如等待子进程结束、向子进程发送信号等。
在子进程中:fork() 调用返回 0。子进程可以根据这个返回值来判断自己是子进程,并执行相应的操作。
出错时:fork() 调用返回 -1,并设置 errno 来指示具体的错误原因,常见的错误包括系统资源不足等。

exec()函数族

主要功能是用一个新的程序替换当前进程的映像。也就是说,调用 exec() 后,当前进程会放弃原来执行的程序,转而执行新的程序。注意,exec() 调用不会创建新的进程,它只是在当前进程的上下文中加载并执行新的程序。

1
2
3
4
5
6
7
#include <unistd.h>

int execl(const char *path, const char *arg, ... /* (char *) NULL */);
int execv(const char *path, char *const argv[]);
int execle(const char *path, const char *arg, ... /*, (char *) NULL, char * const envp[] */);
int execve(const char *filename, char *const argv[], char *const envp[]);
int execlp(const char *file, const char *arg, ... /* (char *) NULL */);

返回值
exec() 系列函数只有在出错时才会返回 -1,并设置 errno 来指示具体的错误原因,比如文件不存在、权限不足等。如果调用成功,exec() 函数不会返回,因为当前进程已经被新的程序所替换。


在实际应用中,fork() 和 exec() 通常会组合使用。一般的做法是先使用 fork() 创建一个子进程,然后在子进程中调用 exec() 来执行新的程序,而父进程可以继续执行其他任务,或者等待子进程结束。这种组合方式可以实现多任务处理,例如在一个程序中启动另一个程序来完成特定的任务。

Next:
孤儿进程和僵尸进程
Prev:
文件属性与目录操作函数