当前位置: 首页 > news >正文

网站建设咨询服务商上海网站推广珈维

网站建设咨询服务商,上海网站推广珈维,成都优化教育百度推广,网站备案注意事项Linux操作系统从入门到实战(十八)在Linux里面怎么查看进程前言一、如何识别一个进程?—— PID二、怎么查看进程的信息?方式1:通过/proc目录方式2:用ps命令三、父进程是什么?—— PPID四、bash是…

Linux操作系统从入门到实战(十八)在Linux里面怎么查看进程

  • 前言
  • 一、如何识别一个进程?—— PID
  • 二、怎么查看进程的信息?
    • 方式1:通过/proc目录
    • 方式2:用ps命令
  • 三、父进程是什么?—— PPID
  • 四、bash是什么?
  • 五、如何创建子进程?—— fork函数
    • 1. fork的用法
    • 2. 关于fork的三个关键问题


前言

  • 上一篇博客里我们讲解了进程与进程的基本概念
  • 这篇博客我们开始讲解在Linux里面怎么查看进程

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Linux知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12879535.html?spm=1001.2014.3001.5482


.

一、如何识别一个进程?—— PID

前面我们知道每个进程都有一个唯一的“身份证号”,叫PID(进程标识符)。

  • 当我们写了一段代码,想知道它运行时的PID,可以用getpid()函数获取:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>int main() {pid_t id = getpid();  // 获取当前进程的PIDprintf("我的PID是:%d\n", id);  // 打印PIDreturn 0;
}

编译后用./myprocess运行,就能看到它的PID了。

在这里插入图片描述

二、怎么查看进程的信息?

知道了PID,我们可以通过两种方式查看进程的详细信息:

方式1:通过/proc目录

Linux系统里有个特殊的/proc目录,里面存放着所有正在运行的进程的信息,每个进程的信息都放在以它的PID命名的文件夹里。

在这里插入图片描述

比如你的进程PID是1,可以用:

ls /proc/1  # 查看这个进程的详细信息

如果用ctrl+c终止了进程,再看/proc/12345就会发现这个文件夹消失了——因为进程已经没了。

另外,每次重新运行程序,PID会变(就像每次重启软件,它的“身份证号”会换一个)。
在这里插入图片描述

方式2:用ps命令

ps是专门查看进程的命令,配合grep可以快速找到你关心的进程。
比如想找名为myprocess的进程:

ps axj | grep "myprocess"  # axj表示显示详细信息,grep过滤出包含myprocess的行

如果想先看一下ps命令的输出格式,可以加head -1显示表头:

ps axj | head -1  # 只显示第一行(表头)

在这里插入图片描述

三、父进程是什么?—— PPID

每个进程不仅有自己的PID,还有一个“父PID(PPID)”,表示它是由哪个进程创建的。
比如你可以用getppid()函数获取当前进程的父进程PID:

在这里插入图片描述

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int main() {pid_t pid = getpid();    // 自己的PIDpid_t ppid = getppid();  // 父进程的PIDprintf("我的PID:%d,父进程PID:%d\n", pid, ppid);return 0;
}

运行后会发现,每次用命令行(比如终端)启动./myprocess,它的父进程PID基本不变——因为这个父进程是bash
在这里插入图片描述

四、bash是什么?

  • bash就是你打开的终端(命令行界面)本身对应的进程。

  • 我们在终端里输入的所有命令(比如ls./myprocess),最终都会被bash创建成一个新进程来执行。

  • 所以我们运行的myprocess,父进程自然就是bash

五、如何创建子进程?—— fork函数

bash能创建子进程(比如你的myprocess),那我们自己的程序能不能创建子进程呢?可以用fork()函数。

1. fork的用法

看一段简单的代码:

#include <stdio.h>
#include <unistd.h>  
#include <sys/types.h>int main() {printf("我是原始进程,PID:%d,PPID:%d\n", getpid(), getppid());// 创建子进程fork();sleep(1);  // 等1秒,让输出更清晰printf("这句话会被打印几次?\n");return 0;
}

编译后运行./myprocess,会发现“这句话会被打印几次?”出现了两行——因为fork()创建了一个子进程,原始进程(父进程)和新创建的子进程都会执行fork()之后的代码。

在这里插入图片描述

2. 关于fork的三个关键问题

  1. fork的返回值有两个?
    是的。fork()成功后:

    • 父进程会得到子进程的PID(一个大于0的数);
    • 子进程会得到0。
  2. 为什么一个函数会有两个返回值?
    因为fork()创建子进程后,会复制父进程的代码和数据(默认共享),但父进程和子进程会“分头”继续执行。所以fork()之后,相当于有两个“程序”在跑,各自拿到了一个返回值。

  3. 同一个变量怎么会既等于0又大于0?
    虽然父子进程共享代码,但数据是独立的。比如fork()的返回值存到变量ret里,父进程的ret是子进程PID(>0),子进程的ret是0——它们各自的ret是独立的,互不影响。这是为了保证进程之间的数据不冲突。


以上就是这篇博客的全部内容,下一篇我们将继续探索Linux的更多精彩内容。

我的个人主页
欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Linux知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12879535.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述

http://www.dtcms.com/a/487942.html

相关文章:

  • 青岛cms建站系统顺德门户网站建设公司
  • 【评测】百炼大模型视频生成初体验
  • 算法---动态规划(Dynamic Programming, DP)
  • 如何建立网站会员系统吗电商网站怎么做seo
  • 西安SEO网站推广长治网站制作
  • 山东城建建设职业学院教务网站第一章 网站建设基本概述
  • 新网站多久被收录自己做的网站搜索不到
  • 算法入门:专题二---滑动窗口(长度最小的子数组)类型题目攻克!
  • 知名排版网站wordpress如何安裝
  • 电子商务网站设计毕业设计论文电影网站开发PPT模板
  • index.html网站怎么做wordpress关注公众号发送验证码
  • dede做的网站打不开云服务器一般多少钱
  • HTTP Error 5OO.0- ASPNET Core lIS hosting failure (in-process)
  • 机械做卖产品网站百度识图网页版
  • 公司注册网站系统东营区住房和城乡建设局网站
  • LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
  • 怎么让网站绑定域名访问不了开发软件怎么申请版权
  • 光通信网站模板百度app下载安装官方免费版
  • vllm-openai Docker 部署手册
  • 什么是网站主办者宜兴专业做网站公司
  • 微信官网网站移动电子商务平台就是手机网站
  • 建设单位网站需求报告网站页面设计代码
  • 做网站不懂行情 怎么收费想用vs做网站 学什么
  • 网站域名绑定ip微信公众号怎么做预约功能
  • 如何申请GitHub账号?
  • 创意响应式网站建设别的网站做相关链接怎么做
  • 存储引擎:数据库的核心架构与B+树的深度解析
  • 网站建设策划方案t优化网站排名推荐公司
  • 网站建设怎么设计更加吸引人免费建设网站
  • 网站开发中都引用什么文献绍兴网络推广公司