- 论坛徽章:
- 0
|
3.1 程序
程序(program)是存放在磁盘文件中的可执行文件。使用6个e x e c函数中的一个由内核将程序读入存储器,并使其执行。
3.2 进程和进程I D
程序的执行实例被称为进程( process).每个UNIX进程都一定有一个唯一的数字标识符,称为进程ID(process ID)。进程I D总是一非负整数。
调用函数getpid得到其进程ID。
3.3 进程控制
有三个用于进程控制的主要函数: fork、exec和waitpid.
例:
#include
#include
#define MAXLINE 1024;
int main(void)
{
char buf[MAXLINE];
pid_t pid;
int status;
printf(%% ");
while(fgets(buf,MAXLINE,stdin)!=NULL)
{
buf[strlen(buf)-1]=0;
if( (pid=fork())
{
printf("fork error");
exit(-1);
}
else if(pid == 0 )
{
execlp(buf,buf,(char *)0);
exit(127);
}
if( (pid = waitpid(pid,&status,0))
{
printf("waitpid err\n");
exit(-1);
}
printf("%% ");
}
exit(0);
}
调用fork创建一个新进程。新进程是调用进程的复制品,故称调用进程为父进程,新创建的进程为子进程。fork对父进程返回新子进程的非负进程ID,对子进程则返回0。因为fork创建一新进程,所以说它被调用一次(由父进程),但返回两次(在父进程中和在子进程中)。
在子进程中,调用execlp以执行从标准输入读入的命令。这就用新的程序文件替换了子进程。fork和跟随其后的exec的组合是某些操作系统所称的产生一个新进程。在UNIX中,这两个部分分成两个函数。
子进程调用execlp执行新程序文件,而父进程希望等待子进程终止,这一要求由调用waitpid实现,其参数指定要等待的进程(在这里, pid参数是子进程ID )。waitpid函数也返回子进程的终止状态( status变量)。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/34065/showart_275859.html |
|