『 Linux 』使用fork函数创建进程与进程状态的查看(上)

简介: 『 Linux 』使用fork函数创建进程与进程状态的查看(上)



🖥️ 前言 🖥️

『 Linux 』进程概念 中了解到了操作系统对于进程的管理也是使用了"先描述后组织的方式",且提到可以使用以下方式来查看进程:

  • ps
    只能查看当前渠道内的进程,若是需要查看所有进程应该加上修饰,即使用ps axj | grep id_PID来查看进程;
  • top
    top命令更像是Windows下的任务管理器,一般用来观察内存当中占用较大的那个进程;
  • ls /proc
    使用ls命令以目录的形式来查看进程;

🖥️ 通过系统调用获取进程标识符 🖥️

💻 进程标识符PID

在Linux中不仅可以使用以上方式查看进程,也可以通过系统调用的方式使程序获取到当前进程标识符;

在Linux中有一个头文件为这个头文件提供了一些关于系统调用和底层操作的有关函数;这个头文件包含了许多操作系统接口访问的重要功能;

而在这个头文件中存在个函数,这个函数为pid_t getpid(),其中这个函数的返回值类型pid_t可以看成是一个unsigned int类型;

该函数能够使该程序获取自身的进程标识符PID;

示例:

#include<iostream>
#include<unistd.h>
using namespace std;
void test1(){
  while(1){
  cout<<"the PID is  "<<getpid()<<endl;//打印出该进程的PID
  cout<<"##########################"<<endl;
  sleep(1);
  }
}
int main()
{
  test1();
  return 0;
}

当运行这个程序之后这个进程将以间隔1s的速度打印出以上内容,同时带上PID;

使用ps查看该进程的状态:

$ ps axj | head -1 && ps axj | grep 32391 | grep -v grep
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
31335 31336 31336 31336 pts/1    32391 Ss    1002   0:00 -bash
31336 32391 32391 31336 pts/1    32391 S+    1002   0:00 ./myproc

当使用kill -9 32391命令时向该进程发送9号信号将该进程杀死;

the PID is  32391
##########################
the PID is  32391
##########################
the PID is  32391
##########################
Killed
$

💻 父进程标识符PPID

在该头文件中一样存在着一个函数可以使得该程序获取当前进程的父进程的PID,也就是PPID;

#include<iostream>
#include<unistd.h>
using namespace std;
void test1(){
  while(1){
  cout<<"the PID is  "<<getpid()<<endl;//打印出该进程的PID
    cout<<"the PPID is  "<<getppid()<<endl;//打印出该进程父进程的PID
  cout<<"##########################"<<endl;
  sleep(1);
  }
}
int main()
{
  test1();
  return 0;
}

当程序运行时:

the PID is  886
the PPID is  31336
##########################
the PID is  886
the PPID is  31336
##########################
the PID is  886
the PPID is  31336
##########################

使用ps也能直接的观察到该进程的PID与PPID从而进行验证;

ps axj | head -1 && ps axj | grep 886 | grep -v grep
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
31336   886   886 31336 pts/1      886 S+    1002   0:00 ./myproc
31335 31336 31336 31336 pts/1      886 Ss    1002   0:00 -bash

然而从该处可以直接看到其实该进程的父进程就是一个-bash命令行解释器;


『 Linux 』使用fork函数创建进程与进程状态的查看(下)https://developer.aliyun.com/article/1424456

相关文章
|
3天前
|
NoSQL Linux 程序员
【linux进程信号(一)】信号的概念以及产生信号的方式
【linux进程信号(一)】信号的概念以及产生信号的方式
|
3天前
|
Linux
【linux进程间通信(一)】匿名管道和命名管道
【linux进程间通信(一)】匿名管道和命名管道
|
3天前
|
Java Shell Linux
【linux进程控制(三)】进程程序替换--如何自己实现一个bash解释器?
【linux进程控制(三)】进程程序替换--如何自己实现一个bash解释器?
|
3天前
|
算法 Linux Shell
【linux进程(二)】如何创建子进程?--fork函数深度剖析
【linux进程(二)】如何创建子进程?--fork函数深度剖析
|
3天前
|
存储 Linux Shell
【linux进程(一)】深入理解进程概念--什么是进程?PCB的底层是什么?
【linux进程(一)】深入理解进程概念--什么是进程?PCB的底层是什么?
|
4天前
|
消息中间件 Unix Linux
Linux的学习之路:17、进程间通信(1)
Linux的学习之路:17、进程间通信(1)
20 1
|
4天前
|
存储 安全 Linux
Linux的学习之路:9、冯诺依曼与进程(1)
Linux的学习之路:9、冯诺依曼与进程(1)
18 0
|
10天前
|
算法 Linux 调度
深入理解Linux内核的进程调度机制
【4月更文挑战第17天】在多任务操作系统中,进程调度是核心功能之一,它决定了处理机资源的分配。本文旨在剖析Linux操作系统内核的进程调度机制,详细讨论其调度策略、调度算法及实现原理,并探讨了其对系统性能的影响。通过分析CFS(完全公平调度器)和实时调度策略,揭示了Linux如何在保证响应速度与公平性之间取得平衡。文章还将评估最新的调度技术趋势,如容器化和云计算环境下的调度优化。
|
1月前
|
消息中间件 Linux 调度
【Linux 进程/线程状态 】深入理解Linux C++中的进程/线程状态:阻塞,休眠,僵死
【Linux 进程/线程状态 】深入理解Linux C++中的进程/线程状态:阻塞,休眠,僵死
67 0
|
11天前
|
监控 Linux
linux监控指定进程
请注意,以上步骤提供了一种基本的方式来监控指定进程。根据你的需求,你可以选择使用不同的工具和参数来获取更详细的进程信息。
14 0