Linux操作系統從入門到實戰(十八)在Linux里面怎么查看進程

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.pswp.cn/pingmian/93066.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93066.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93066.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[TryHackMe](知識學習)---基于堆棧得到緩沖區溢出

1.了解緩沖區溢出WINDOWS程序動態調試工具immunity debuggerhttps://www.immunityinc.com/products/debugger/2.Mona腳本#!/usr/bin/env python3import socket, time, sysip "10.201.99.37"port 1337 timeout 5 prefix "OVERFLOW1 "string prefix &q…

LRU算法與LFU算法

知識點&#xff1a; LRU是Least Recently Used的縮寫&#xff0c;意思是最近最少使用&#xff0c;它是一種Cache替換算法 Cache的容量有限&#xff0c;因此當Cache的容量用完后&#xff0c;而又有新的內容需要添加進來時&#xff0c; 就需要挑選 并舍棄原有的部分內容&#xf…

目標檢測公開數據集全解析:從經典到前沿

目標檢測公開數據集全解析&#xff1a;從經典到前沿 一、引言 目標檢測&#xff08;Object Detection&#xff09;是計算機視覺領域的核心任務之一&#xff0c;旨在在圖像或視頻中識別并定位感興趣的物體。與圖像分類不同&#xff0c;目標檢測不僅需要判斷物體的類別&#xf…

數據備份與進程管理

一、數據備份1.Linux服務器中需要備份的數據&#xff08;1&#xff09;Linux系統重要數據&#xff1a;/root/目錄&#xff0c;/home/目錄&#xff0c;/etc/目錄&#xff08;2&#xff09;安裝服務的數據&#xff1a;Apache&#xff08;配置文件&#xff0c;網頁主目錄&#xff…

docker volume卷入門教程

1. 基礎概念 Docker卷是專門用于持久化容器數據的存儲方案&#xff0c;獨立于容器生命周期。其核心優勢包括&#xff1a; 數據持久化&#xff1a;容器刪除后數據仍保留跨容器共享&#xff1a;多個容器可訪問同一卷備份與遷移&#xff1a;支持直接復制卷數據驅動支持&#xff1a…

計算機網絡——協議

1. 計算機網絡分層1.1 OSI 7層模型應用層表示層會話層傳輸層網絡層數據鏈路層物理層1.2 TCP/IP 4 層模型應用層運輸層網際層網絡接口層1.3 5層體系機構應用層傳輸層網絡層數據鏈路層物理層2. 應用層協議2.1 HTTP協議2.1.1 基本介紹HTTP&#xff08;HyperText Transfer Protocol…

【React】hooks 中的閉包陷阱

在 React Hooks 中的 閉包陷阱&#xff08;Closure Trap&#xff09;在 useEffect、事件回調、定時器等場景里很常見。1. 閉包陷阱是什么 當你在函數組件里定義一個回調&#xff08;比如事件處理函數&#xff09;&#xff0c;這個回調會捕獲當時渲染時的變量值。如果后面狀態更…

校園快遞小程序(騰訊地圖API、二維碼識別、Echarts圖形化分析)

&#x1f388;系統亮點&#xff1a;騰訊地圖API、二維碼識別、Echarts圖形化分析&#xff1b;一.系統開發工具與環境搭建1.系統設計開發工具后端使用Java編程語言的Spring boot框架 項目架構&#xff1a;B/S架構 運行環境&#xff1a;win10/win11、jdk17小程序&#xff1a; 技術…

Python網絡爬蟲(二) - 解析靜態網頁

文章目錄一、網頁解析技術介紹二、Beautiful Soup庫1. Beautiful Soup庫介紹2. Beautiful Soup庫幾種解析器比較3. 安裝Beautiful Soup庫3.1 安裝 Beautiful Soup 43.2 安裝解析器4. Beautiful Soup使用步驟4.1 創建Beautiful Soup對象4.2 獲取標簽4.2.1 通過標簽名獲取4.2.2 通…

【Linux基礎知識系列】第九十四篇 - 如何使用traceroute命令追蹤路由

在網絡環境中&#xff0c;了解數據包從源主機到目標主機的路徑是非常重要的。這不僅可以幫助我們分析網絡連接問題&#xff0c;還可以用于診斷網絡延遲、丟包等問題。traceroute命令是一個強大的工具&#xff0c;它能夠追蹤數據包在網絡中的路徑&#xff0c;顯示每一跳的延遲和…

達夢數據閃回查詢-快速恢復表

Time:2025/08/12Author:skatexg一、環境說明DM數據庫&#xff1a;DM8.0及以上版本二、適用場景研發在誤操作或變更數據后&#xff0c;想馬上恢復表到某個時間點&#xff0c;可以通過閃回查詢功能快速實現&#xff08;通過全量備份恢復時間長&#xff0c;成本高&#xff09;三、…

力扣(LeetCode) ——225 用隊列實現棧(C語言)

題目&#xff1a;用隊列實現棧示例1&#xff1a; 輸入&#xff1a; [“MyStack”, “push”, “push”, “top”, “pop”, “empty”] [[], [1], [2], [], [], []] 輸出&#xff1a; [null, null, null, 2, 2, false] 解釋&#xff1a; MyStack myStack new MyStack(); mySta…

微軟推出AI惡意軟件檢測智能體 Project Ire

開篇 在8月5號&#xff0c;微軟研究院發布了一篇博客文章&#xff0c;在該篇博客中推出了一款名為Project Ire的AI Agent。該Agent可以在無需人類協助的情況下&#xff0c;自主分析和分類二進制文件。它可以在無需了解二進制文件來源或用途的情況下&#xff0c;對文件進行完全的…

哪些對會交由SpringBoot容器管理?

在 Spring Boot 中,交由容器管理的對象通常稱為“Spring Bean”,這些對象的創建、依賴注入、生命周期等由 Spring 容器統一管控。以下是常見的會被 Spring Boot 容器管理的對象類型及識別方式: 一、通過注解聲明的組件(最常見) Spring Boot 通過類級別的注解自動掃描并注…

Android POS應用在android運行常見問題及解決方案

概述 本文檔記錄了在Android POS應用開發過程中遇到的兩個關鍵問題及其解決方案&#xff1a; UnsatisfiedLinkError: couldnt find "libnative.so" 錯誤ActivityNotFoundException 錯誤商戶信息一致性檢查繞過 問題1&#xff1a;UnsatisfiedLinkError - libnative.so…

基于SpringBoot的旅游網站系統

1. 項目簡介 旅游線路管理系統是一個基于Spring Boot的在線旅游服務平臺&#xff0c;提供旅游線路展示、分類、預訂、訂單管理等功能。系統包含前臺用戶界面和后臺管理模塊&#xff0c;支持用戶注冊登錄、線路瀏覽、收藏、下單支付、客服咨詢等核心功能。管理員可管理線路信息、…

CVPR 2025 | 機器人操控 | RoboGround:用“掩碼”中介表示,讓機器人跨場景泛化更聰明

點擊關注gongzhonghao【計算機sci論文精選】1.導讀1.1論文基本信息論文標題&#xff1a;ROBOGROUND: Robotic Manipulation with Grounded Vision-Language Priors作者&#xff1a;Haifeng Huang, Xinyi Chen, Hao Li&#xff0c; Xiaoshen Han, Yilun Chen, Tai Wang, Zehan W…

構建Node.js單可執行應用(SEA)的方法

如果為了降低部署復雜度&#xff0c;可以考慮使用vercel/ncc。除非有特別理由&#xff0c;不建議使用SEA。1. 環境準備1.1. 基礎要求Node.js: > 19.0.0 (推薦最新LTS版本)1.2. 安裝依賴npm install postject typescript1.3. 驗證環境node -v # 確認版本 > 19 ts…

Java19 Integer 位操作精解:compress與expand《Hacker‘s Delight》(第二版,7.4節)

compress(int i, int mask) 這個方法是Java 19中新增的一個強大的位操作函數。compress 方法的核心功能可以理解為 “按位過濾和壓縮” 。過濾 (Filter): 它使用 mask&#xff08;掩碼&#xff09;作為過濾器。對于輸入整數 i&#xff0c;只有那些在 mask 中對應位為 1 的比特才…

minio部署和雙機熱備

安裝單機版MinIO&#xff08;準備2臺機器A、B,A、B服務器操作一致&#xff09;切換目錄并下載MinIO二進制文件cd /usr/local/bin wget https://dl.minio.org.cn/server/minio/release/linux-amd64/minio chmod x minio編輯配置文件vi /etc/default/minio.confMINIO_VOLUMES&quo…