• linux高编进程-------进程创建fork 、getpid 、getppid


    创建一个进程:

    /********************
     *功能:创建一个新进程,通过复制当前进程(和父进程一样),执行的位置都一样
     *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
    ",getpid());
        //0.在fork前一定要刷新之前打开的流
        fflush(NULL);
        //1.创建进程
        pid = fork();
        if( pid < 0 )
        {
            perror("fork()");
            exit(1);
        }
        //2.子进程
        if(pid == 0)
        {
            printf("[%d]:child is working
    ",getpid());
        }
        else
        {
            printf("[%d]:parent is working
    ",getpid());
        }
        printf("[%d]:end
    ",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 输出到终端(行缓冲,加了 刷新了缓冲区,所以begin打印了一次)

    *[root]# ./forkbase > /tmp/out 重定向到一个文件,文件是全缓冲模式( 只是换行),由于子进程继承父进程的一切,那么缓冲区就有两个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(轻量级进程)---线程

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

    进程号顺次向下使用

  • 相关阅读:
    蓝桥杯训练 2n皇后问题
    AtCoder Grand Contest #026 B
    AtCoder Grand Contest #026 A
    AtCoder Beginner Contest 103
    7-26 单词长度(15 分)
    uva 10006 Carmichael Numbers
    java并发带返回结果的批量任务执行(CompletionService:Executor + BlockingQueue)
    并发容器之CopyOnWriteArrayList
    模板模式
    静态工具类中使用注解注入service
  • 原文地址:https://www.cnblogs.com/muzihuan/p/5283805.html
Copyright © 2020-2023  润新知