首页 > 代码库 > 一、进程与信号进程的创建

一、进程与信号进程的创建

进程创建

#include <sys/types.h>#include <unistd.h>pid_t fork(void);fork 调用2次,所以又2次返回值,父进程中返回子进程id》0 ,子进程中返回0,出错返回-1

进程实例

#include <unistd.h>#include <string.h>#include <fcntl.h>#include <stdlib.h>#include <stdio.h>int main(void){    printf("now pid: %d\n",getpid());    pid_t pid;    pid=fork();    int i;        if(pid<0)    {        printf("create progress error\n");        return 1;    }    else if(pid ==0)    {        for(i=0;i<10;i++)        {            printf("I am son progress,pid: %d ppid: %d\n",getpid(),getppid());            i++;            sleep(1);        }            }    else    {        for(i=0;i<10;i++)        {            printf("I am father progress,pid: %d ppid: %d\n",getpid(),getppid());            i++;            sleep(1);        }            }    printf("pid: %d\n",getpid());    sleep(1);    return 0;}

运行结果

now pid: 3324I am father progress,pid: 3324 ppid: 3166I am son progress,pid: 3325 ppid: 3324I am father progress,pid: 3324 ppid: 3166I am son progress,pid: 3325 ppid: 3324I am father progress,pid: 3324 ppid: 3166I am son progress,pid: 3325 ppid: 3324I am father progress,pid: 3324 ppid: 3166I am son progress,pid: 3325 ppid: 3324I am father progress,pid: 3324 ppid: 3166I am son progress,pid: 3325 ppid: 3324pid: 3324pid: 3325
可以看出父子进程是交替运行的
父子进程哪个先运行根据系统调度

子进程继承

子进程继承属性    用户信息权限,目录信息,信号信息,环境,共享存储段,资源限制,堆,栈和数据段,共享代码段子进程特有属性    进程id,锁信息,运行时间,未决信号操作文件的内核结构变化    子进程只继承父进程的文件描述符表,不继承单共享文件表项和i-node    父进程创建一个子进程后,文件表项的引用计数器加1变2,当父进程close操作后,计数器减1,子进程还是可以使用文件表项,只有计数器为0时才释放文件表项

技术分享

只有正文段共享物理内存

静态变量,全局变量存储于正文段,局部变量存储于栈中

一、进程与信号进程的创建