码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2016-08-29 00:05:35      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

进程创建

#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: 3324
I am father progress,pid: 3324 ppid: 3166
I am son progress,pid: 3325 ppid: 3324
I am father progress,pid: 3324 ppid: 3166
I am son progress,pid: 3325 ppid: 3324
I am father progress,pid: 3324 ppid: 3166
I am son progress,pid: 3325 ppid: 3324
I am father progress,pid: 3324 ppid: 3166
I am son progress,pid: 3325 ppid: 3324
I am father progress,pid: 3324 ppid: 3166
I am son progress,pid: 3325 ppid: 3324
pid: 3324
pid: 3325
可以看出父子进程是交替运行的
父子进程哪个先运行根据系统调度

子进程继承

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

技术分享

只有正文段共享物理内存

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

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

标签:

原文地址:http://www.cnblogs.com/peixiguang/p/5816312.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!