以实际代码解答
#include<unistd.h>
#include<stdio.h>
int main(int argc, char ** argv )
{
int pid = fork()
if (pid <0)
{
printf("error!")
}
else if( pid == 0 )
{
printf("This is the child process!")//此处就是子进程执行
}
else{
printf("This is the parent process! child process id = %d", pid)//此处是父进程.
}
return 0
}
fork 函数的特点就是一次调用,两次返回。并且返回给子进程和父进程的返回值不同,对于子进程返回为0,对于父进程返回为子进程的PID号
系统调用fork后进程就分叉了。
LINUX中进程的最大理论数计算:每个进程的局部段描述表LDT都作为一个独立的段而存在,在全局段描述表GDT中要有一个表项指向这个段的起始地址,并说明该段的长度以及其他一些 参数。除上之外,每个进程还有一个TSS结构(任务状态段)也是一样。所以,每个进程都要在全局段描述表GDT中占据两个表项。那么,GDT的容量有多大 呢?段寄存器中用作GDT表下标的位段宽度是13位,所以GDT中可以有8192个描述项。除一些系统的开销(例如GDT中的第2项和第3项分别用于内核 的代码段和数据段,第4项和第5项永远用于当前进程的代码段和数据段,第1项永远是0,等等)以外,尚有8180个表项可供使用,所以理论上系统中最大的 进程数量是4090。
现在一般能打开64个。文件描述符的范围是0 ~ O P E N _ M A X 。早期的U N I X版本采用的上限值是1 9 (允许每个进程打开2 0个文件),现在很多系统则将其增加至6 3。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)