进程创建常用函数
fork
fork() 系统调用的主要功能是创建一个新的进程,这个新进程被称为子进程,而调用 fork() 的进程则被称为父进程。子进程是父进程的一个副本,它会复制父进程的大部分状态,包括内存空间、文件描述符、程序计数器等。
1 |
|
在父进程中:fork() 调用会返回子进程的进程 ID(PID),这是一个正整数。通过这个 PID,父进程可以对特定的子进程进行管理,比如等待子进程结束、向子进程发送信号等。
在子进程中:fork() 调用返回 0。子进程可以根据这个返回值来判断自己是子进程,并执行相应的操作。
出错时:fork() 调用返回 -1,并设置 errno 来指示具体的错误原因,常见的错误包括系统资源不足等。
exec()函数族
主要功能是用一个新的程序替换当前进程的映像。也就是说,调用 exec() 后,当前进程会放弃原来执行的程序,转而执行新的程序。注意,exec() 调用不会创建新的进程,它只是在当前进程的上下文中加载并执行新的程序。
1 |
|
返回值
exec() 系列函数只有在出错时才会返回 -1,并设置 errno 来指示具体的错误原因,比如文件不存在、权限不足等。如果调用成功,exec() 函数不会返回,因为当前进程已经被新的程序所替换。
在实际应用中,fork() 和 exec() 通常会组合使用。一般的做法是先使用 fork() 创建一个子进程,然后在子进程中调用 exec() 来执行新的程序,而父进程可以继续执行其他任务,或者等待子进程结束。这种组合方式可以实现多任务处理,例如在一个程序中启动另一个程序来完成特定的任务。