进程间通信-1-160815

    xiaoxiao2025-11-17  1

    IPC 

    Inter-Process Communication 进程间通信

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

    接下来几个重点先列出来

    1进程辨识符pid(学控制的童鞋注意,这个pid不是那个pid)

    2进程的产生 fork函数 vfork函数

    3进程的消亡释放资源(也就是常说的收尸)

    4exec函数

    5用户权限和组权限

    6.system函数

    7.进程会计

    8.进程时间

    9 守护进程(精灵进程)

    10.系统日志

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

    ps命令

    ps axf 描述当前的进程

    ps axm 以详细信息来查看

    ps ax -L 以linux特有的来查看,多了个LWP行

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

    1.pid_t pid pid_t是有符号整形数字

    init 进程是1号进程

    pid是个进程号,是顺次向下的

    getpid() getppid()获得进程号和获得父进程号

    2进程的产生

    fork()和vfork()

    fork执行一次,返回两次,一次在子进程中返回,一次在父进程中返回

    pid_t fork()子进程是通过父进程实现的, 除了pid和ppid 当然儿子和爹不能一个pid号。执行到的位置也是一样的~~~~

    父子进程的区别:

    1fork的返回值不一样

    2pid,ppid不同

    3.未决信号,文件锁不继承(未决信号:还没执行)

    4资源利用率清零

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

    =======来个fork的例子,运行的时候不知道是父先执行,还是子先执行============================

    这个是调度器的调度策略来决定谁先运行的。。。。。。。。。。

    假如一定要子先运行,就给父亲来个sleep(不推荐这么用,就是为了演示一下)

    运行代码会看到begin 一次,end两次

    #include<stdio.h> #include<string.h> #include<unistd.h> #include<stdlib.h>

    int main() {

        pid_t pid;     printf("  %d  begin!\n",getpid());

    fflush(NULL);//刷新所有的流,这个很重要,如果不刷新的话,会出现begin两次,如果用重定向可以看到两次begin     pid = fork();     if(pid < 0)     {         perror("fork()");         exit(1);     }     if (pid ==0)     {         printf("%d, i am a child\n",getpid());

        }     else     {         printf("%d, i am a parent\n",getpid());

        }     printf("   %d  END!\n",getpid());

        exit(0); }

    
    转载请注明原文地址: https://ju.6miu.com/read-1304297.html
    最新回复(0)