关于进程(1)

162 阅读2分钟

1 fork函数

image.png fork函数用来创建一个子进程。对于父进程,fork()函数返回新创建的子进程的PID。对于子进程,

fork()函数调用成功会返回0。如果创建出错,fork()函数返回-1。

编译该代码

image.png

查看进程

使用 ps aux image.png

结论

fork()函数不需要参数,返回值是一个进程标识符PID。返回值有以下三种情况:

(1) 对于父进程,fork()函数返回新创建的子进程的PID。

(2) 对于子进程,fork()函数调用成功会返回0。

(3) 如果创建出错,fork()函数返回-1。

fork()函数创建一个新进程后,会为这个新进程分配进程空间,将父进程的进程空间中的内容复制到子

进程的进程空间中,包括父进程的数据段和堆栈段,并且和父进程共享代码段。这时候,子进程和父进

程一模一样,都接受系统的调度。因为两个进程都停留在fork()函数中,最后fork()函数会返回两次,一

次在父进程中返回,一次在子进程中返回,两次返回的值不一样,如上面的三种情况。 fork之后通常使用if分流,让父子进程执行不同的代码。

2 进程状态

创建进程=为进程多创建一个PCB(进程管理模块)

教程关于状态的描述 (图来自百度) image.png

  • R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列

里。

  • S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠

(interruptible sleep))。

  • D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的

进程通常会等待IO的结束。

  • T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可

以通过发送 SIGCONT 信号让进程继续运行。

  • X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态