進程 = 正在執行中的程式實例。每個終端機指令、編輯器、Shell 都是獨立進程。
$ ps x
PID TTY STAT TIME COMMAND
5276 pts/2 Ss 0:00 bash # 終端機 Shell
5297 pts/2 S+ 0:00 vim # 編輯器
5298 pts/1 R+ 0:00 ps x # ps 指令本身也是進程
/proc/sys/kernel/pid_max)#include <unistd.h>
#include <stdio.h>
int main() {
pid_t pid = fork();
sleep(5); // 保持進程存活方便觀察
if (pid > 0)
printf("New process PID: %d\n", pid); // 父進程印出子進程 PID
else
return 0; // 子進程直接結束 (或可執行其他邏輯)
return 0;
}
$ ./s
New process PID: 5456
$ ps x
5455 pts/2 S+ 0:00 ./s # 父進程
5456 pts/2 S+ 0:00 ./s # 子進程 (PID 符合輸出)
5457 pts/3 R+ 0:00 ps x
fork()成功返回子進程 PID (父進程) 與 0 (子進程);失敗返回 -1。子進程從fork()下一條指令開始執行,擁有父進程資源的完整副本。