Day28、进程的管理(创建、退出)、子进程

本文详细介绍了Linux操作系统中的进程管理,包括进程的概念、进程的组织管理方式、如何获取进程PID、如何创建子进程(fork系统调用)以及进程的同步与退出(wait和waitpid系统调用)。通过示例代码展示了如何使用这些系统调用来实现进程间的交互和管理。
摘要由CSDN通过智能技术生成

一、进程的管理

1、什么是进程?

进程是程序运行的一个实例。

PCB(进程控制块)

pid:进程号

2、Linux进程的组织管理方式

在linux操作系统中,所有的用户进程组成了一棵树,进程和进程之间的关系是父子关系,或兄弟关系。

tarena@tarena-virtual-machine:~$ pstree

init─┬─NetworkManager─┬─dhclient

     │                ├─dnsmasq

     │                └─2*[{NetworkManager}]

     ├─accounts-daemon───{accounts-daemon}

     ├─acpid

     ├─atd

    ├─avahi-daemon───avahi-daemon

init  1号进程   是进程树的树根

pstree (命令) :列出所有用户进程

ps –aux  (命令):查看当前进程的详细信息

3、怎么获取进程的pid

getpid  (2)系统调用:系统调用是用内核来提供服务

#include<sys/types.h>

#include<unistd.h>

pid_tgetpid(void);

pid_tgetppid(void);

功能:获取进程的进程号

参数:

返回值:

举例:pid.c

  1#include<stdio.h>

  2#include<sys/types.h>

  3#include<sys/unistd.h>

  4int main(void){

 5     pid_t pid;

 6     pid=getpid();

 7    printf("pid=%d\n",pid);

 8     getchar();

 9     return 0;

 10 }

tarena@tarena-virtual-machine:~$ gcc pid.c

tarena@tarena-virtual-machine:~$ ./a.out

pid=3154

 

tarena@tarena-virtual-machine:~$ ps -aux

tarena@tarena-virtual-machine:~$ gcc pid.c-E -o getpid.i  (查看typedefine  pid_t的类型)

tarena@tarena-virtual-machine:~$ pstree

     ├─gnome-terminal─┬─bash───pstree

     │                ├─bash───a.out

bash是pstree和a.out的父进程

4、创建一个子进程

fork (2)

#include<unistd.h>

pid_tfork(void);

功能:创建一个子进程

返回值:

在父进程中,子进程的pid被返回

在子进程中,0被返回

-1代表fork系统调用失败。errno被设置

注意:当fork调用结束时,内核就已经有两个进程(父与子),两个PCB

两个进程都运行这个程序往下走,先执行父进程还是子进程不一定

fork 执行后,父进程和子进程执行同一段代码

子进程还是父进程先执行是异步的。(谁先谁后执行不确定,系统调用决定)

       举例:fork.c

         1 #include<stdio.h>

  2#include<unistd.h>

  3int main(){

 4     pid_t pid;

 5     pid=fork();//此时,已经有两个进程

 6     if(pid<0){   //创建子进程失败

 7        perror("fork");

 8         return 1;

 9     }

 10    if(pid= =0){// 子进程创建成功

 11        printf("pid=%d\n",getpid());//打印子进程的pid

 12     }

 13    else{//如果不加else父进程和子进程都执行下一条语句,加上后只有父进程执行

 14    printf("mypid=%d\n",getpid());//父进程的pid

 15     }

 16    return 0;

 17 }

tarena@tarena-virtual-machine:~$ ./a.out

mypid=3227

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值