Linux 多进程

目录

0x01 linux中特殊的进程

0x02 进程的标识

0x03 创建子进程


0x01 linux中特殊的进程

  1. 0号进程:idle进程,系统启动加载的进程
  2. 1号进程:systemd进程,系统初始化,是所有进程的祖先进程 init
  3. 2号进程:kthreadd进程,负责内核中所有进程的调度和管理

0x02 进程的标识

  • 每个进程都会有一个非负整数来标识进程,pid
  • 查看进程的命令 ps -ef | grep yourprocessname

从左到右依次是:启动进程的用户 进程的id标识 父进程的id cpu占用率 开始时间 启动设备 运行总时间 启动时执行的命令

# 使用getpid(void)可以获取进程的id
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<unistd.h>

int main(){
    
    printf("进程的id=%d",getpid());
    printf("进程的父进程id=%d",getppid());

    sleep(10);
	return 0;
}

0x03 创建子进程

  • 使用fork函数可以创建新的进程
  • 在子进程调用fork函数创建进程会返回0,在父进程中使用fork函数会返回进程的ID
  • 子进程是父进程的副本
  • 子进程获得了父进程的数据空间,堆和栈的副本,不是共享,子进程改变数据,不会影响父进程变量的数据
  • 如果父进程先退出,子进程会成为孤儿进程,1号进程会管理孤儿进程,对子进程的状态进行收集工作
  • 如果子进程先退出,内核会向父进程发送一个SIGCHLD的信号,如果父进程不处理这个信号,子进程会成为僵尸进程
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>

#include<signal.h>

void func(int sig){
	 int state;
     wait(&state);
}
int main(){
    // 1忽略子进程的sigchld
    // signal(SIGCHLD,SIG_IGN);
    // 3使用函数处理信号
    signal(SIGCHLD,func);
    File* file=fpopen("/tmp/tmp.txt","w+");
    fprintf(file,"this is a test\n
    fflush(file);
	printf("进程的id=%d",getpid());
    sleep(10);
	printf("进程的id=%d",getpid());
    int pid=fork();
    printf("fork出的id为%d",pid);
    sleep(1);
    if(pid==0)
    {
        printf("子进程的id为%d",getpid());
        printf("子进程的父进程id为%d",getppid
        //子进程的逻辑代码
   		fprintf(fp,"子进程 this is a test\n");
    }
    if(pid>0)
    {
		printf("父进程的id为%d",getpid());
        printf("父进程的父进程id为%d",getppid());
        //父进程的逻辑代码
    	fprintf(fp," 父进程 this is a test\n");
        //2 等待子进程退出的代码 使用wait方式阻塞等待子进程退出
        // int state;
        // wait(&state);
    }
	printf("进程的id=%d",getpid());
    sleep(30);
	printf("进程的id=%d",getpid());

    fclose(file);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值