进程控制
1、进程标识
每个进程都有一个非负整型的唯一进程ID。
有某些专用的进程:
进程id 0是调度进程,常常被称为交换进程,该进程并不执行任何磁盘上的程序-是内核的一部分,也被称为系统进程。
进程id 1通常是init进程,在自举过程结束时由内核调用。init进程绝不会终止,它是一个普通的用户进程,但它以超级用户特权运行。
某些UNIX的虚存实现中,进程id 2是页精灵进程,也是内核进程。
2、fork函数
#include <sys/types.h> #include <unistd.h> pid_t fork(void);
由fork创建的新进程被称为子进程,该函数被调用一次,但返回两次。两次返回的区别是:子进程返回的是0,而父进程返回的是新子进程的进程ID。
子进程和父进程继续执行fork之后的指令。子进程是父进程的复制品。
#include "ourhdr.h" #include <sys/types.h> int glob = 6; char buf[] = "a write to stdout\n"; int main(void) { int var; pid_t pid; var=88; if (write(STDOUT_FILENO,buf,sizeof(buf)-1) != sizeof(buf)-1) err_sys("write error"); if ((pid=fork())<0) err_sys("fork error"); else if (pid == 0) { glob++; var++; }else sleep(2); printf("pid = %d, glob = %d, var = %d\n",getpid(),glob, var); exit(0); }
编译执行
gcc fork.c
./a.out a write to stdout pid = 20346, glob = 7, var = 89 pid = 20345, glob = 6, var = 88
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。