各位看官好,上回做DIY ls命令,今天進入新主題——創建進程。
進程就是系統中正在運行的程序。比如你正在用的vim、bash終端、甚至ps命令本身,都是進程。用ps x可查看:
PID TTY STAT TIME COMMAND
5276 pts/2 Ss 0:00 bash // 終端進程
5297 pts/2 S+ 0:00 vim // 編輯器進程
5298 pts/1 R+ 0:00 ps x // ps命令自身進程
進程是抽象概念,系統用PID(進程ID)編號管理。PID從0開始,0和1為系統保留特殊ID。
終端輸入命令回車即創建進程;代碼中用fork()函數。
fork()成功返回新進程PID(>0),失敗返回-1。
#include
#include
int main() {
pid_t pid;
pid = fork();
sleep(5); // 方便觀察
if (pid > 0)
printf("pid is: %d \n", pid); // 父進程印出子進程PID
else
return 0; // 子進程直接退出
}
$ ./s
pid is: 5456 // 父進程輸出
# 另開終端 ps x
PID TTY STAT TIME COMMAND
5455 pts/2 S+ 0:00 ./s // 父進程
5456 pts/2 S+ 0:00 ./s // 子進程(PID匹配輸出)
fork()創建子進程,父子進程並發運行fork()返回0sleep(5)確保父進程輸出前子進程尚未退出,便於ps觀察完整代碼在資源區。下回我們將深入講解父進程與子進程的關係,敬請期待!