0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深入解析Linux程序与进程

马哥Linux运维 来源:马哥Linux运维 2024-12-18 11:01 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

什么是程序

一组计算机能识别和执行的指令,用于指导计算机执行特定任务或解决特定问题。程序通常由代码、数据和资源文件组成,涉及语法、算法和数据结构。为二进制文件

什么是进程

是一个具有独立功能的程序关于某个数据集合的一次运行活动。作为系统进行资源分配和调度的基本单位,是操作系统结构的基础。

程序与进程的关系

262b0ea4-bb90-11ef-8732-92fbcf53809c.png

进程的状态

26475186-bb90-11ef-8732-92fbcf53809c.png

基础进程状态

创建状态:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态

就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行

执行状态:进程处于就绪状态被调度后,进程进入执行状态

阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用

终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行

更多的状态

运行态:running

就绪态:ready

睡眠态:分为两种,可中断:interruptable,不可中断:uninterruptable

停止态:stopped,暂停于内存,但不会被调度,除非手动启动

僵尸态:zombie,僵尸态,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭僵死态 的子进程

如何结束僵尸态

创建僵尸进程

26644a52-bb90-11ef-8732-92fbcf53809c.png

利用top或ps指令查看僵尸态进程(Z)PID号

2678cda6-bb90-11ef-8732-92fbcf53809c.png

利用kill发送指令唤醒僵尸进程的父进程来实现回收僵尸进程

[root@localhost ~]# kill -18 6904

268844ca-bb90-11ef-8732-92fbcf53809c.png

也可以通过杀死僵尸进程的夫进程,但不建议使用。

进程的类型

守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程

前台进程:跟终端相关,通过终端启动的进程

进程的优先级

静态优先级:100-139

动态优先级:-20 --19

进程管理相关命令

ps

查看静态的进程统计信息

进程相关信息保存在/proc目录中

若ps不加选项,查看不到多少信息

[root@localhost ~]# ps
   PID TTY          TIME CMD
  6950 pts/2    0000 bash
  7441 pts/2    0000 ps

一般使用指令:ps aux

选项

a 显示所以进程信息
u 以用户为主的格式输出
x 显示当前用户在所有终端下的进程信息
k|--sort 属性 对属性排序,属性前加 - 表示倒序

ps输出属性

[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 193700 6852 ? Ss 12:53 0:02 /usr/lib/systemd/systemd
root 2 0.0 0.0 0 0 ? S 12:53 0:00 [kthreadd]

user 进程用户
PID pid号
%CPU CPU的使用率
%MEM 内存的使用率
VSZ 虚拟内存大小
RSS 真实内存大小
TTY 终端设备
STAT 进程状态
START 进程启动时间
TIME 进程运行了多少时间
COMMAND 进程命令名称

查看进程信息

prstat PID号

[root@localhost ~]# prtstat 6900
Process: sshd          State: S (sleeping)
  CPU#:  1  TTY: 0:0Threads: 1
Process, Group and Session IDs
  Process ID: 6900  Parent ID: 1152
    Group ID: 6900 Session ID: 6900
  T Group ID: -1

Page Faults
  This Process    (minor major):     1741         3
  Child Processes (minor major):     1384         1
CPU Times
  This Process    (user system guest blkio):   0.00   0.18   0.00   0.00
  Child processes (user system guest):         0.01   0.00   0.00
Memory
  Vsize:       151 MB    
  RSS:         5357 kB     RSS Limit: 18446744073709 MB
  Code Start:  0x5644f8c0d000 Code Stop:  0x5644f8cd4a24
  Stack Start: 0x7ffc51c00f00
  Stack Pointer (ESP): 0x7ffc51c003f8 Inst Pointer (EIP): 0x7fb109e23783
Scheduling
  Policy: normal
  Nice:   0  RT Priority: 0 (non RT)

top

实时查看进程统计信息

[root@localhost ~]# top
top - 17:01:45 up  4:08,  4 users,  load average: 0.00, 0.01, 0.05
Tasks: 209 total,   1 running, 208 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1867048 total,    76652 free,   796612 used,   993784 buff/cache
KiB Swap:  2097148 total,  2097004 free,      144 used.   810116 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND             
   430 root      20   0       0      0      0 S   0.3  0.0   0:01.72 xfsaild/dm-0        
     1 root      20   0  193700   6852   4068 S   0.0  0.4   0:02.61 systemd             
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd            
     3 root      20   0       0      0      0 S   0.0  0.0   0:00.02 ksoftirqd/0         
     5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H        
     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.03 migration/0         
     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh              
     9 root      20   0       0      0      0 S   0.0  0.0   0:00.65 rcu_sched           
    10 root      rt   0       0      0      0 S   0.0  0.0   0:00.06 watchdog/0          
    11 root      rt   0       0      0      0 S   0.0  0.0   0:00.05 watchdog/1          
    12 root      rt   0       0      0      0 S   0.0  0.0   0:00.01 migration/1         
    13 root      20   0       0      0      0 S   0.0  0.0   0:00.07 ksoftirqd/1         
    15 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H        
    16 root      rt   0       0      0      0 S   0.0  0.0   0:00.05 watchdog/2          
    17 root      rt   0       0      0      0 S   0.0  0.0   0:00.01 migration/2         
    18 root      20   0       0      0      0 S   0.0  0.0   0:00.01 ksoftirqd/2         
    19 root      20   0       0      0      0 S   0.0  0.0   0:00.03 kworker/2:0         
    20 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/2:0H        
    21 root      rt   0       0      0      0 S   0.0  0.0   0:00.04 watchdog/3          
    22 root      rt   0       0      0      0 S   0.0  0.0   0:00.01 migration/3         
    23 root      20   0       0      0      0 S   0.0  0.0   0:00.01 ksoftirqd/3         
    25 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/3:0H        
    27 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kdevtmpfs           
    28 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 netns               
    29 root      20   0       0      0      0 S   0.0  0.0   0:00.00 khungtaskd          

各个字段的含义如下:

PID:进程的 ID。

USER:该进程所属的用户。

PR:优先级,数值越小优先级越高。

NI:优先级,数值越小、优先级越高。

VIRT:该进程使用的虚拟内存的大小,单位为 KB。

RES:该进程使用的物理内存的大小,单位为 KB。

SHR:共享内存大小,单位为 KB。

S:进程状态。

%CPU:该进程占用 CPU 的百分比。

%MEM:该进程占用内存的百分比。

TIME+:该进程共占用的 CPU 时间。

COMMAND:进程的命令名。

top命令栏位信息简介
us:用户空间
sy:内核空间
ni:调整nice时间
id:空闲
wa:等待IO时间
hi:硬中断
si:软中断(模式切换)
st:虚拟机偷走的时间

在top中的命令

q 退出命令
s 修改刷新时间间隔
k 终止指定进程
w 保存文件

pgrep

查看指定的进程

-u 指定用户
-l 显示进程命
-a 显示完整格式的进程名

[root@localhost ~]# pgrep -u asdjkl
9828
9834
9841
9842
9900
9905
9991
10010
10015
10018
10037
[root@localhost ~]# pgrep -u asdjkl -l
9828 gnome-keyring-d
9834 gnome-session-b
9841 dbus-launch
9842 dbus-daemon
9900 gvfsd
9905 gvfsd-fuse
9991 ssh-agent
10010 at-spi-bus-laun
10015 dbus-daemon
[root@localhost ~]# pgrep -u asdjkl -a
9828 /usr/bin/gnome-keyring-daemon --daemonize --login
9834 /usr/libexec/gnome-session-binary --session gnome-classic
9841 dbus-launch --sh-syntax --exit-with-session
9842 /bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session
9900 /usr/libexec/gvfsd
9905 /usr/libexec/gvfsd-fuse /run/user/1000/gvfs -f -o big_writes
9991 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"

pstree

以树形结构列出进程信息

常用选项
-a 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等
-p 显示PID
-u 显示用户切换
-H pid 高亮显示指定进程及其前辈进程

[root@localhost ~]# pstree -a
systemd --switched-root --system --deserialize 21
  ├─ModemManager
  │   └─2*[{ModemManager}]
  ├─NetworkManager --no-daemon
  │   └─2*[{NetworkManager}]

[root@localhost ~]# pstree -p
systemd(1)─┬─ModemManager(762)─┬─{ModemManager}(785)
           │                   └─{ModemManager}(801)
           ├─NetworkManager(841)─┬─{NetworkManager}(849)
           │                     └─{NetworkManager}(855)
           ├─VGAuthService(750)
           ├─abrt-watch-log(758)
           ├─abrt-watch-log(760)
           ├─abrtd(739)

[root@localhost ~]# pstree -u
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager───2*[{NetworkManager}]
        ├─VGAuthService
        ├─2*[abrt-watch-log]
        ├─abrtd
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─alsactl

26a13520-bb90-11ef-8732-92fbcf53809c.png

free

查看进程占用 内存的详细信息

[root@localhost ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1867048     1247944      119912       13656      499192      358276
Swap:       2097148        6572     2090576
[root@localhost ~]# 

iostat

iostat 可以提供更丰富的IO性能状态数据

Total DISK READ :0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:0.00 B/s | Actual DISK WRITE:       0.00 B/s
   TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                              
     1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd --switched-~tem --deserialize 21
     2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
     3 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
     5 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H]
 10246 be/4 asdjkl0.00 B/s    0.00 B/s  0.00 %  0.00 % seapplet
     7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
     8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_bh]
     9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_sched]
    10 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    11 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/1]
    12 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]
    13 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/1]
    15 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/1:0H]
    16 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/2]
    17 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/2]
    18 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/2]
    20 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/2:0H]
    21 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/3]
    22 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/3]

iotop

查看网络流量

进程管理

手动启动

"命令 &",把命令放入后台执行

运行中的作业: Ctrl+z 放到后台 但是会停止作业

尚未启动的作业: 命令 &

查看后台任务列表 :jobs

调出后台任务: fg

继续任务:bg

并行执行任务:每个命令使用&隔开

结束进程

kill

kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的

kill后面的选项
[root@localhost ~]# trap -l
 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL10) SIGUSR1
11) SIGSEGV12) SIGUSR213) SIGPIPE14) SIGALRM15) SIGTERM
16) SIGSTKFLT17) SIGCHLD18) SIGCONT19) SIGSTOP20) SIGTSTP
21) SIGTTIN22) SIGTTOU23) SIGURG24) SIGXCPU25) SIGXFSZ
26) SIGVTALRM27) SIGPROF28) SIGWINCH29) SIGIO30) SIGPWR
31) SIGSYS34) SIGRTMIN35) SIGRTMIN+136) SIGRTMIN+237) SIGRTMIN+3
38) SIGRTMIN+439) SIGRTMIN+540) SIGRTMIN+641) SIGRTMIN+742) SIGRTMIN+8
43) SIGRTMIN+944) SIGRTMIN+1045) SIGRTMIN+1146) SIGRTMIN+1247) SIGRTMIN+13
48) SIGRTMIN+1449) SIGRTMIN+1550) SIGRTMAX-1451) SIGRTMAX-1352) SIGRTMAX-12
53) SIGRTMAX-1154) SIGRTMAX-1055) SIGRTMAX-956) SIGRTMAX-857) SIGRTMAX-7
58) SIGRTMAX-659) SIGRTMAX-560) SIGRTMAX-461) SIGRTMAX-362) SIGRTMAX-2
63) SIGRTMAX-164) SIGRTMAX

计划任务

一次性的计划任务

[root@localhost ~]# at 13:50
at> mkdir kk
at> 
job 1 at Thu Apr 18 13:50:00 2024
[root@localhost ~]# ls
[root@localhost ~]# ls
123  ??  aa   anaconda-ks.cfg  initial-setup-ks.cfg  公共  模板  视频  图片  文档  下载  音乐  桌面
[root@localhost ~]# ls
??   aa               initial-setup-ks.cfg  公共  视频  文档  音乐
123  anaconda-ks.cfg  kk     模板  图片  下载  桌面
您在 /var/spool/mail/root 中有新邮件

周期性的计划任务

crontab [选项] [file]

选项 功能
-u user 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo 用户的 crontab 服务,此选项一般有 root 用户来运行。
-e 编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
-l 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。
-r 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。
-i 在删除用户的 crontab 文件时,给确认提示。


*  *  *  *    *
分时日月周

链接:https://www.cnblogs.com/zhj0708/p/18143407

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217959
  • 程序
    +关注

    关注

    117

    文章

    3836

    浏览量

    84760
  • 进程
    +关注

    关注

    0

    文章

    208

    浏览量

    14478

原文标题:深入解析Linux程序与进程:你不知道的高效运行秘诀

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【书籍评测活动NO.67】成为硬核Linux开发者:《Linux 设备驱动开发(第 2 版)》

    解析模块的构建逻辑,重点介绍树外构建与树内构建,讲解Linux内核编程技巧。系统讲解并发与同步、延迟与中断处理等核心辅助函数,包括自旋锁与互斥锁的区别及适用场景、等待队列实现进程休眠等待的机制。以字符
    发表于 11-17 17:52

    Linux进程间通信(IPC)全解析:从管道到 Socket,一篇讲透

    在 Linux 世界里,进程并非孤立存在。无论是后台服务协作(如 Web 服务器与数据库)、命令行工具联动(如ps | grep),还是复杂应用的模块通信,都离不开 进程间通信(IPC
    的头像 发表于 11-14 21:38 1.2w次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>进程</b>间通信(IPC)全<b class='flag-5'>解析</b>:从管道到 Socket,一篇讲透

    深入解析LIBS光谱仪的核心技术与应用优势

    “LIBS光谱仪原理”、“LIBS应用优势”或“激光诱导击穿光谱技术解析”时,期待获得系统且权威的解答。本文将深入解析LIBS光谱仪的核心技术特点,剖析其在现代分析中的独特优势,帮助您全面了解这一先进光谱仪器的实际应用价值,助力
    的头像 发表于 09-10 16:58 566次阅读
    <b class='flag-5'>深入</b><b class='flag-5'>解析</b>LIBS光谱仪的核心技术与应用优势

    【HZ-T536开发板免费体验】—— linux 进程创建

    Linux进程通信方式有这几种: 1。管道 2。信号量 3。消息队列 4。共享内存 在本帖子中,我会讲解fork(),exit()系统调用的实践。通过应用编程来实现系统调用。 1,进程创建 打开
    发表于 09-01 20:49

    华纳云服务器Linux系统电源管理与节能优化配置方法

    在云计算时代,Linux系统的电源管理优化成为提升云服务器能效的关键环节。本文将深入解析Linux内核的电源管理机制,从CPU调频策略到磁盘休眠设置,提供一套完整的节能配置方案。通过调
    的头像 发表于 08-21 15:09 596次阅读

    Linux系统性能调优方案

    关键要点预览:本文将深入解析Linux系统性能瓶颈的根本原因,提供可直接落地的调优方案,让你的系统性能提升30-50%!
    的头像 发表于 08-06 17:49 576次阅读

    Linux权限体系解析

    你真的了解Linux权限吗?大多数人只知道rwx,但Linux的权限体系远比你想象的复杂和强大。今天我们深入探讨Linux的12位权限体系,这是每个运维工程师都应该掌握的核心知识。
    的头像 发表于 07-23 16:57 592次阅读

    Linux网络管理的关键技术和最佳实践

    在大型互联网企业中,Linux网络管理是运维工程师的核心技能之一。面对海量服务器、复杂网络拓扑、高并发流量,运维人员需要掌握从基础网络配置到高级网络优化的全套技术栈。本文将结合大厂实际场景,深入解析
    的头像 发表于 07-09 09:53 674次阅读

    Linux后台进程管理详解

    当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件。对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨)。为了使这些进程能够在后台运行,也就是说不在终端屏幕上运行,有几种选择方法可
    的头像 发表于 04-25 11:04 801次阅读
    <b class='flag-5'>Linux</b>后台<b class='flag-5'>进程</b>管理详解

    Linux系统进程管理入门指南

    Linux 系统中,进程是正在运行的程序的实例。理解进程的管理、查看和控制对于系统管理员和开发者来说非常重要
    的头像 发表于 04-22 14:34 855次阅读
    <b class='flag-5'>Linux</b>系统<b class='flag-5'>进程</b>管理入门指南

    Linux环境再升级:PLIN驱动程序正式发布

    PLIN驱动程序现已正式发布,本文将展示如何安装PLIN驱动程序,以及如何在Linux环境下进行基本的PLIN通信操作,确保您能够快速掌握并应用这一新工具。
    的头像 发表于 04-21 15:29 793次阅读
    <b class='flag-5'>Linux</b>环境再升级:PLIN驱动<b class='flag-5'>程序</b>正式发布

    深度解析Linux中的DNS服务

    dns,Domain Name Server,它的作用是将域名解析为 IP 地址,或者将IP地址解析为域名。
    的头像 发表于 04-09 16:13 688次阅读

    Linux进程状态详解

    进程状态是task_struct内的一个整数;进行:进程在调度队列中,进程的状态都是running,阻塞:等待某种设备或者资源就绪。进程是一个队列,设备也是一个队列,当我们读磁盘,读网
    的头像 发表于 04-01 09:46 809次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>进程</b>状态详解

    深入解析:SiP与SoC的技术特点与应用前景

    级芯片)是两种备受关注的封装技术。尽管它们都能实现电子系统的小型化、高效化和集成化,但在技术原理、应用场景和未来发展等方面却存在着显著的差异。本文将深入解析SiP
    的头像 发表于 02-14 11:32 1767次阅读
    <b class='flag-5'>深入</b><b class='flag-5'>解析</b>:SiP与SoC的技术特点与应用前景

    深入探讨Linux系统中的动态链接库机制

    本文将深入探讨Linux系统中的动态链接库机制,这其中包括但不限于全局符号介入、延迟绑定以及地址无关代码等内容。 引言 在软件开发过程中,动态库链接问题时常出现,这可能导致符号冲突,从而引起程序运行
    的头像 发表于 12-18 10:06 934次阅读
    <b class='flag-5'>深入</b>探讨<b class='flag-5'>Linux</b>系统中的动态链接库机制