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
    +关注

    关注

    87

    文章

    11279

    浏览量

    209264
  • 程序
    +关注

    关注

    117

    文章

    3782

    浏览量

    80990
  • 进程
    +关注

    关注

    0

    文章

    203

    浏览量

    13958

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    程序进程的区别

    比如: 开发写的代码我们称为程序,那么将开发的代码运行起来。我们称为进程
    的头像 发表于 11-25 16:03 198次阅读
    <b class='flag-5'>程序</b>和<b class='flag-5'>进程</b>的区别

    Linux驱动程序程序员指南

    电子发烧友网站提供《Linux驱动程序程序员指南.pdf》资料免费下载
    发表于 11-22 15:53 0次下载
    <b class='flag-5'>Linux</b>驱动<b class='flag-5'>程序</b><b class='flag-5'>程序</b>员指南

    深入Linux进程管理:提升效率与稳定性的关键方法

    目录 Linux进程管理 8.1 IO负载 8.2 实时进程监控 5.1 作业与会话 5.2 作业分类 4.1 ps 4.2pstree 4.3pgrep 4.4pidof 4.5 vmstat
    的头像 发表于 11-22 11:05 188次阅读
    <b class='flag-5'>深入</b><b class='flag-5'>Linux</b><b class='flag-5'>进程</b>管理:提升效率与稳定性的关键方法

    一文搞懂Linux进程的睡眠和唤醒

    ): 进程在等待某个条件满足(如I/O操作),可以被信号唤醒。 Linux通过内核提供的系统调用来控制进程的睡眠。常用的系统调用有: sleep(): 使进程暂停指定的秒数。 usl
    发表于 11-04 15:15

    Linux用户身份与进程权限详解

    在学习 Linux 系统权限相关的主题时,我们首先关注的基本都是文件的 ugo 权限。ugo 权限信息是文件的属性,它指明了用户与文件之间的关系。但是真正操作文件的却是进程,也就是说用户所拥有的文件
    的头像 发表于 10-23 11:41 324次阅读
    <b class='flag-5'>Linux</b>用户身份与<b class='flag-5'>进程</b>权限详解

    Linux设备驱动程序分类有哪些

    Linux设备驱动程序是操作系统与硬件设备之间的桥梁,负责实现硬件设备与操作系统之间的通信和控制。Linux设备驱动程序的分类繁多,可以根据不同的标准进行分类。 按硬件类型分类
    的头像 发表于 08-30 15:11 508次阅读

    linux驱动程序如何加载进内核

    Linux系统中,驱动程序是内核与硬件设备之间的桥梁。它们允许内核与硬件设备进行通信,从而实现对硬件设备的控制和管理。 驱动程序的编写 驱动程序的编写是
    的头像 发表于 08-30 15:02 431次阅读

    深入解析 MEMS 可编程 LVPECL/LVDS 振荡器 SiT9120 系列

    深入解析 MEMS 可编程 LVPECL/LVDS 振荡器 SiT9120 系列
    的头像 发表于 08-13 16:23 424次阅读
    <b class='flag-5'>深入</b><b class='flag-5'>解析</b> MEMS 可编程 LVPECL/LVDS 振荡器 SiT9120 系列

    深入探讨Linux进程调度器

    Linux操作系统作为一个开源且广泛应用的操作系统,其内核设计包含了许多核心功能,而进程调度器(Scheduler)就是其中一个至关重要的模块。进程调度器负责决定在任何给定的时刻哪个进程
    的头像 发表于 08-13 13:36 935次阅读
    <b class='flag-5'>深入</b>探讨<b class='flag-5'>Linux</b>的<b class='flag-5'>进程</b>调度器

    深入解析与无线通信RFIC设计与测试实用指南

    深入解析与无线通信RFIC设计与测试实用指南
    发表于 04-16 11:03 309次阅读
    <b class='flag-5'>深入</b><b class='flag-5'>解析</b>与无线通信RFIC设计与测试实用指南

    linux下查询进程占用的内存方法有哪些?

    linux下查询进程占用的内存方法
    发表于 04-08 06:03

    如何使用linux下gdb来调试python程序

    如何使用linux下gdb来调试python程序  在Linux下,可以使用GDB(GNU调试器)来调试Python程序。GDB是一个强大的调试工具,可以帮助开发者诊断和修复
    的头像 发表于 01-31 10:41 2558次阅读

    浅谈Linux进程

    进程程序的区别: 进程是动态的,程序是静态的 一、进程的创建(fork()函数) int main(){ pid_t pid; pid=f
    的头像 发表于 01-28 15:54 255次阅读
    浅谈<b class='flag-5'>Linux</b>的<b class='flag-5'>进程</b>

    深入了解Linux中vi命令的使用

    深入了解Linux中vi命令的使用 VI是一款在Linux系统中使用的文本编辑器,它是一款功能强大、灵活性高的编辑器。VI编辑器具有非常高效的命令行操作方式,并且在各个版本的Linux
    的头像 发表于 12-25 11:15 454次阅读