| 网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 |
![]() |
| Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道 |
简单理解为,一个进程表示的,就是一个可执行程序的一次执行过程中的一个状态。操作系统对进程的管理,典型的情况,是通过进程表完成的。进程表中的每一个表项,记录的是当前操作系统中一个进程的情况。对于单 CPU的情况而言,每一特定时刻只有一个进程占用 CPU,但是系统中可能同时存在多个活动的(等待执行或继续执行的)进程。
fork()用于从已存进程中建立一个新进程,新进程为子进程,老进程为父进程.可以通过检查"fork()"地返回值知道哪个是子进程哪个是父进程。父进程得到的返回值是子进程的进程号,而子进程则返回0。 网管u家u.bitscn@com
基本模式是:
#include
#include
#include
#include
#include
#include
main()
{
pid_t pid;
int rv;
pid=fork(); //创建进程
switch(pid)
{
case -1: //返回-1的话,进程创建没成功
perror("fork");
exit(1);
case 0:
printf(" CHILD: This is the child process!\n");
printf(" CHILD: My PID is %d\n", getpid()); //调用 getpid 得到自己的 PID
printf(" CHILD: My parent's PID is %d\n", getppid()); //getppid() 得到父进程的 PID
printf(" CHILD: Enter my exit status (make it small): ");
scanf(" %d", &rv);
printf(" CHILD: I'm outta here!\n");
exit(rv);
网管网www.bitscn.com
if (!fork())
{
printf("I'm the child!\n");
exit(0);
} else
{
printf("I'm the parent!\n");
wait(NULL);
}
linux 是多用户和多进程的操作系统,进程在操作系统中的创建,都会生成一个进程描述块,描述当前进程的所有信息,包括,数据段、代码段、堆栈段的地址,当前进程的环境变量,文件描述符等。
fork函数过程:操作系统先创建一个进程描述块,然后把父进程的所有进程描述符的信息精确拷贝过来,和父进程一样(除了进程ID不一样外),代码段共享,数据段和堆栈段复制,所有的寄存器的值全部精确拷贝,文件描述符也许精确拷贝。
网管联盟bitsCN_com
fork的返回值,fork在父进程空间中返回子进程的PID,在子进程空间中返回0。
网管u家u.bitscn@com
|
0
|
评论加载中…