第八章 进程控制
8.1 引言
8.2 进程标识符
1. 函数原型:
pid_t getpid(void); //返回调用进程的进程ID
pid_t getppid(void); //返回进程的父进程ID
uid_t getuid(void); //返回调用进程的实际用户ID
uid_t geteuid(void); //返回调用进程的有效用户ID
gid_t getgid(void); //返回调用进程的实际组ID
gid_t getegid(void); //返回调用进程的有效组ID
头文件:unistd.h
8.3 fork函数
1. 函数原型:
pid fork(void);
头文件:unistd.h
返回值:子进程中返回0,父进程中返回子进程ID,出错返回-1。
函数功能:创建一个新进程。
2.示例:
************************ 例 8-1 ****************************
//使用fork函数创建子进程
#include <stdio.h>
#include <unistd.h>
int glob =6;
int main()
{
int var;
pid_t pid;
var=88;
if((pid=fork())<0)
{
printf("fork error/n");
}
else if(pid==0)
{
glob++;
var++;
printf("child :");
}
else
{
sleep(2);
printf("parent :");
}
printf("pid=%d,glob=%d,var=%d/n",getpid(),glob,var);
return 0;
}
运行结果:
root@BDAMA:~/study# ./173
child :pid=11929,glob=7,var=89
parent :pid=11928,glob=6,var=88
*******************************************************
8.4 vfork函数
1. vfork函数用于创建一个新进程,而该新进程的目的是exec一个新程序。
2. vfork函数与fork函数的区别:
都一个样创建子进程,但是vfork并不将父进程的地址空间完全复制到子进程中,相反,在子进程调用exec或exit之前,它在父进程
空间运行。还有,vfork保证子进程运行,在它调用exec或exit之后父进程才能被调度运行。