进程间通信-1-160815

本文深入讲解了进程间通信(IPC)的基本概念和技术细节,包括进程标识符PID、进程创建(fork与vfork函数)、进程终结、exec函数、权限设置、system函数等内容,并介绍了守护进程等高级主题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值