进程控制

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

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。