7.3 进程控制

发布时间 2023-07-27 14:34:17作者: C~A

每个进程都有一个唯一的正数进程ID。getpid函数返回调用进程的PID。

创建和终止进程

进程总处于以下三种状态之一:

运行。进程要么在CPU上执行,要么在等待被执行且最终会被内核调度。

停止。进程的执行被挂起(suspended),且不会被调度。当收到SIGSTOP、SIGT-STP、SIGTTIN或者SIGTTOU信号时,进程就停止,并且保持停止直到它收到一个SIGCONT信号,在这个时刻,进程再次开始运行。(信号是一种软件中断的形式,将在8.5节中详细描述。)

终止。进程永远地停止了。进程会因为三种原因终止:1)收到一个信号,该信号的默认行为是终止进程,2)从主程序返回,3)调用exit函数。

父进程通过调用fork函数创建一个新的运行的子进程。在父进程中,fork函数返回子进程的PID,子进程fork函数返回0。

新创建的子进程几乎但不完全与父进程相同。子进程得到与父进程用户级虚拟地址空间相同的(但是独立的)一份副本,包括代码和数据段、堆、共享库以及用户栈。子进程还获得与父进程任何打开文件描述符相同的副本,这就意味着当父进程调用fork时,子进程可以读写父进程中打开的任何文件。父进程和新创建的子进程之间最大的区别在于它们有不同的PID。