天天看点

linux进程控制(fork,getpid,lockf)

编写一段程序(程序命名为fork()),使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和2个子进程活动。让每一个进程在屏幕上显示字符说明:父进程显示“Father”,子进程分别显示“Child1”,“Child2”;

#include<stdio.h>

#include<sys/types.h>

#include<unistd.h>

int main()

{

int pid1,pid2;

printf("Father\n");

if((pid1=fork())<0)

{

printf("Child1 fail creat!\n");

return 1;

}

else if(pid1==0)

{

printf("Child1\n");

return;

}

if((pid2=fork())<0)

{

printf("Child2 fail creat!\n");

return 1;

}

else if(pid2==0)

{

printf("Child2\n");

return;

}

}

 运行结果:

linux进程控制(fork,getpid,lockf)

(1)fork  vfork

声明方式:

pid_t fork(void);

pid_t fork(void);

加入头文件

#include<sys/types.h>

#include<unistd.h>

(2)getpid获取进程的pid

将上述源代码中改一下:

如:printf("Child1(pid=%d)",getpid());

(3)lockf 在进程同步中为进程加锁

利用系统调用lockf(fd,mode,size),对指定文件的指定区域(由size指示)进行加锁或解锁,以实现进程同步或互斥。其中,fd是文字描述字;mode是锁定方式,=1表示加锁,=0表示解锁;size是指定文件的指定区域,用0表示从当前位置到文件尾(注:有些linux系统是locking(fd,mode,size))。

在输出行上下各加一句lockf(1,1,0);和lockf(1,0,0);

如:

lockf(1,1,0);

printf("Child1(pid=%d)",getpid());

lockf(1,0,0);

继续阅读