深入解析Linux程序与进程

描述

什么是程序

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

什么是进程

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

程序与进程的关系

Linux

进程的状态

Linux

基础进程状态

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

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

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

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

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

更多的状态

运行态:running

就绪态:ready

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

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

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

如何结束僵尸态

创建僵尸进程

Linux

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

Linux

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

 

 

[root@localhost ~]# kill -18 6904

 

 

Linux

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

进程的类型

守护进程: 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

 

 

Linux

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

 

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分