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

进程创建fork 、getpid 、getppid

时间:2016-03-16 17:13:10      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

创建一个进程:

/********************
 *功能:创建一个新进程,通过复制当前进程(和父进程一样),执行的位置都一样
 *pid_t:一般是16位的有符号的整型数,不够可以typedef    
 * 返回值:非0 :“在父进程中”--->返回子进程编号
 *         0 :”在子进程中“--->返回0
 *        -1 :失败,并设置errno
 * ****************/
pid_t fork(void);

父子进程区别:fork的返回值不一样

                    pid不同

                    ppid不同

                    未决信号(未响应的信号)和文件锁不继承

       资源利用量归0

init进程:是所有进程的祖先进程---1号进程

eg:简单创建一个子进程

/************************
 *创建一个子进程
 ***********************/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    pid_t pid ;
    printf("[%d]:begin\n",getpid());
    //0.在fork前一定要刷新之前打开的流
    fflush(NULL);
    //1.创建进程
    pid = fork();
    if( pid < 0 )
    {
        perror("fork()");
        exit(1);
    }
    //2.子进程
    if(pid == 0)
    {
        printf("[%d]:child is working\n",getpid());
    }
    else
    {
        printf("[%d]:parent is working\n",getpid());
    }
    printf("[%d]:end\n",getpid());
    exit(0);
}

不加fflus有两种结果

结果1:

[root]# ./forkbase
[3862]:begin
[3862]:parent is working
[3862]:end
[3863]:child is working
[3863]:end

结果2:

[root]# ./forkbase > /tmp/out
[root]# cat /tmp/out
[3997]:begin
[3997]:parent is working
[3997]:end
[3997]:begin
[3998]:child is working
[3998]:end

*[root]# ./forkbase 输出到终端(行缓冲,加了\n刷新了缓冲区,所以begin打印了一次)

*[root]# ./forkbase > /tmp/out 重定向到一个文件,文件是全缓冲模式(\n只是换行),由于子进程继承父进程的一切,那么缓冲区就有两个begin,所以begin就会被打印2次,)

*:调度器的调度策略来决定哪个进程先运行

获取pid号:

#include <sys/types.h>
#include <unistd.h>

/********获取当前进程pid号*********/
pid_t getpid(void);

/********获取当前进程的父进程pid号*********/
pid_t getppid(void);

=======================================================================

man ps 

命令ps:输出进程的一些信息

ps axf:打印进程的信息         PID         TTY         STAT      TIME         COMMAND

                                     进程号      占据终端     状态     消耗时间     哪个命令触发的

ps axm:详细信息查看  

ps ax -L :以linux特有的方式查看   LWP(轻量级进程)---线程

=======================================================================

进程号顺次向下使用

 

进程创建fork 、getpid 、getppid

标签:

原文地址:http://www.cnblogs.com/muzihuan/p/5283805.html

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