• 怎么是这样的?

    进程是正在运行的程序实例

    在Linux中,运行某个命令或者启动服务都会有一个进程

    每一个进程在系统中都会分配一个唯一的PID号

    当程序结束的时候,PID会被回收,PID是循环使用的

    进程的权限来自于用户权限,继承自用户权限

    在Linux中使用 ps 命令可以查看进程

    静态进程

    ps 查看静态进程```
    PID:进程ID号(PID
    TTY:得到终端的方式(pts代表伪终端,远程模式或图形化伪终端;tty代表直连;?代表没有终端,为内核进程)
    TIME:表示进程的持续时间
    CMD:表示运行的命令(进程名)
    ```-a查看所有终端运行的进程

    -x可以查看不属于终端的进程,x是查看不属于终端的进程,内核进程等

    -o指定选项,搭配 -a使用

    -u查看进程详细信息,包括用户名,pid,占用信息等

    -e查看所有进程

    -f查看用户PID PPID cpu占用等

    --sort指定排序参数```
    ps -aux --sort=%cpu #以cpu升序排序
    ps -aux --sort=-%cpu #以cpu降序排序
    ps -aux --sort=%cpu | tail #以cpu升序排序,展示末尾10行(展示占用最高的进程
    ```常用的组合用法:

    ps -aux 偏系统占用

    ps -ef偏进程关系


    这块很绕,我现在还在思考 -ax 和 -e的区别,为什么不直接用 -eu 而是用-aux

    我感觉到自学的难处了,我的问题我压根找不到合适的人去问,感觉都很冒昧,虽然现在AI盛行,但AI说的我压根听不懂

    我自己研究了一下,-ax和-e输出的内容确实是不一样的,-ax会输出stat,而-e不会,甚至两边输出的命令一个是截断的,一个是完整的;-aux和-eu输出的其实本质上没见差别,但-eu输出的command命令巨长,不知道为什么?这部分还要去问,这份巨长的命令是啥?-eu输出的基本没有可读性,这是我能见到的最本质的区别,为什么会这样仍不清楚```
    root@VM-0-4-debian:~# ps -ax | head
    PID TTY STAT TIME COMMAND
    1 ? Ss 7:42 /usr/lib/systemd/systemd --system --deserialize=50 showopts
    2 ? S 0:04 [kthreadd]
    3 ? S 0:00 [pool_workqueue_release]
    4 ? I< 0:00 [kworker/R-kvfree_rcu_reclaim]
    5 ? I< 0:00 [kworker/R-rcu_gp]
    6 ? I< 0:00 [kworker/R-sync_wq]
    7 ? I< 0:00 [kworker/R-slub_flushwq]
    8 ? I< 0:00 [kworker/R-netns]
    11 ? I< 0:00 [kworker/0:0H-events_highpri]
    root@VM-0-4-debian:~# ps -e | head
    PID TTY TIME CMD
    1 ? 00:07:42 systemd
    2 ? 00:00:04 kthreadd
    3 ? 00:00:00 pool_workqueue_release
    4 ? 00:00:00 kworker/R-kvfree_rcu_reclaim
    5 ? 00:00:00 kworker/R-rcu_gp
    6 ? 00:00:00 kworker/R-sync_wq
    7 ? 00:00:00 kworker/R-slub_flushwq
    8 ? 00:00:00 kworker/R-netns
    11 ? 00:00:00 kworker/0:0H-events_highpri
    root@VM-0-4-debian:~# ps -ef | head
    UID PID PPID C STIME TTY TIME CMD
    root 1 0 0 May15 ? 00:07:42 /usr/lib/systemd/systemd --system --deserialize=50 showopts
    root 2 0 0 May15 ? 00:00:04 [kthreadd]
    root 3 2 0 May15 ? 00:00:00 [pool_workqueue_release]
    root 4 2 0 May15 ? 00:00:00 [kworker/R-kvfree_rcu_reclaim]
    root 5 2 0 May15 ? 00:00:00 [kworker/R-rcu_gp]
    root 6 2 0 May15 ? 00:00:00 [kworker/R-sync_wq]
    root 7 2 0 May15 ? 00:00:00 [kworker/R-slub_flushwq]
    root 8 2 0 May15 ? 00:00:00 [kworker/R-netns]
    root 11 2 0 May15 ? 00:00:00 [kworker/0:0H-events_highpri]
    root@VM-0-4-debian:~# ps -aux | head
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1 0.0 0.3 25412 14036 ? Ss May15 7:42 /usr/lib/systemd/systemd --system --deserialize=50 showopts
    root 2 0.0 0.0 0 0 ? S May15 0:04 [kthreadd]
    root 3 0.0 0.0 0 0 ? S May15 0:00 [pool_workqueue_release]
    root 4 0.0 0.0 0 0 ? I< May15 0:00 [kworker/R-kvfree_rcu_reclaim]
    root 5 0.0 0.0 0 0 ? I< May15 0:00 [kworker/R-rcu_gp]
    root 6 0.0 0.0 0 0 ? I< May15 0:00 [kworker/R-sync_wq]
    root 7 0.0 0.0 0 0 ? I< May15 0:00 [kworker/R-slub_flushwq]
    root 8 0.0 0.0 0 0 ? I< May15 0:00 [kworker/R-netns]
    root 11 0.0 0.0 0 0 ? I< May15 0:00 [kworker/0:0H-events_highpri]
    root@VM-0-4-debian:~# ps -eu | head
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 3772 0.0 0.0 9232 1704 tty1 Ss+ May15 0:00 /sbin/agetty -o -- \u --noreset --noclear - linux PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin USER=root INVOCATION_ID=f64b781cbb744f9b924ec982cc030e41 TERM=linux CREDENTIALS_DIRECTORY=/run/credentials/[email protected] SYSTEMD_EXEC_PID=3772 MEMORY_PRESSURE_WATCH=/sys/fs/cgroup/system.slice/system-getty.slice/[email protected]/memory.pressure MEMORY_PRESSURE_WRITE=c29tZSAyMDAwMDAgMjAwMDAwMAA=
    root 3789 0.0 0.0 8844 1644 ttyS0 Ss+ May15 0:00 /sbin/agetty -o -- \u --noreset --noclear --keep-baud 115200,57600,38400,9600 - vt220 LANG=en_US.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin USER=root INVOCATION_ID=6d4cd974ecea4396adfe850248358990 TERM=vt220 CREDENTIALS_DIRECTORY=/run/credentials/[email protected] SYSTEMD_EXEC_PID=3789 MEMORY_PRESSURE_WATCH=/sys/fs/cgroup/system.slice/system-serial\x2dgetty.slice/[email protected]/memory.pressure MEMORY_PRESSURE_WRITE=c29tZSAyMDAwMDAgMjAwMDAwMAA=
    root 1287679 0.0 0.1 10060 5936 pts/0 Ss 14:41 0:00 -bash USER=root LOGNAME=root HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin SHELL=/bin/bash TERM=xterm DISPLAY=localhost:10.0 XDG_SESSION_ID=95672 XDG_RUNTIME_DIR=/run/user/0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus XDG_SESSION_TYPE=tty XDG_SESSION_CLASS=user MOTD_SHOWN=pam GOPROXY=https://mirrors.tencent.com/go,direct LANG=en_US.utf8 LANGUAGE=en_US.utf8 SSH_CLIENT=39.154.138.209 2610 22 SSH_CONNECTION=39.154.138.209 2610 10.0.0.4 22 SSH_TTY=/dev/pts/0
    root 1308516 0.0 0.1 10472 4408 pts/0 R+ 16:10 0:00 ps -eu SHELL=/bin/bash LANGUAGE=en_US.utf8 PWD=/root LOGNAME=root XDG_SESSION_TYPE=tty MOTD_SHOWN=pam HOME=/root LANG=en_US.utf8 PROMPT_COMMAND=history -a; SSH_CONNECTION=39.154.138.209 2610 10.0.0.4 22 XDG_SESSION_CLASS=user TERM=xterm USER=root GOPROXY=https://mirrors.tencent.com/go,direct DISPLAY=localhost:10.0 SHLVL=1 XDG_SESSION_ID=95672 XDG_RUNTIME_DIR=/run/user/0 SSH_CLIENT=39.154.138.209 2610 22 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus SSH_TTY=/dev/pts/0 _=/usr/bin/ps
    root 1308517 0.0 0.0 6644 2112 pts/0 S+ 16:10 0:00 head SHELL=/bin/bash LANGUAGE=en_US.utf8 PWD=/root LOGNAME=root XDG_SESSION_TYPE=tty MOTD_SHOWN=pam HOME=/root LANG=en_US.utf8 PROMPT_COMMAND=history -a; SSH_CONNECTION=39.154.138.209 2610 10.0.0.4 22 XDG_SESSION_CLASS=user TERM=xterm USER=root GOPROXY=https://mirrors.tencent.com/go,direct DISPLAY=localhost:10.0 SHLVL=1 XDG_SESSION_ID=95672 XDG_RUNTIME_DIR=/run/user/0 SSH_CLIENT=39.154.138.209 2610 22 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus SSH_TTY=/dev/pts/0 _=/usr/bin/head
    ```我看了一下,好像是unix语法和BSD语法的输出逻辑不同,所以我好像是混用了两套逻辑

    我又去查了一下,这两套语法碰巧都有u这个参数,所以我认为的混用其实在系统看来是两套逻辑

    标准语法是不带有 -这个参数符的,所以正常写的话应该是 ps aux而不应该是 ps -aux

    如果混用的话应该是这么写,ps -e u```
    root@VM-0-4-debian:~# ps -e u | head
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    root 1 0.0 0.3 25412 14036 ? Ss May15 7:42 /usr/lib/systemd/systemd --system --deserialize=50 showopts
    root 2 0.0 0.0 0 0 ? S May15 0:04 [kthreadd]
    root 3 0.0 0.0 0 0 ? S May15 0:00 [pool_workqueue_release]
    root 4 0.0 0.0 0 0 ? I< May15 0:00 [kworker/R-kvfree_rcu_reclaim]
    root 5 0.0 0.0 0 0 ? I< May15 0:00 [kworker/R-rcu_gp]
    root 6 0.0 0.0 0 0 ? I< May15 0:00 [kworker/R-sync_wq]
    root 7 0.0 0.0 0 0 ? I< May15 0:00 [kworker/R-slub_flushwq]
    root 8 0.0 0.0 0 0 ? I< May15 0:00 [kworker/R-netns]
    root 11 0.0 0.0 0 0 ? I< May15 0:00 [kworker/0:0H-events_highpri]

    
    ---
    
    `w` 查看当前系统的登录用户(`who`)
    
    查看实时进程
    
    `top`实时查看系统进程```
    top - 15:49:43 up 52 days, 16:14,  2 users,  load average: 0.01, 0.08, 0.0
    Tasks: 169 total,   1 running, 168 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.3 us,  0.6 sy,  0.0 ni, 99.1 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
    MiB Mem :   3729.3 total,    277.6 free,   1798.5 used,   1940.8 buff/cach
    MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1930.8 avail Mem
    
    15:49:43 当前时间
    52 days, 16:14  开机了52天16小时14分钟
    2 users 两个用户在线(包含有伪终端等,我这里是vnc一个root用户,和ssh一个root用户)
    load average: 0.01, 0.08, 0.0 cpu平均占用(每分钟,五分钟,十分钟)
    Tasks: 169 total 进程总数(169个
    1 running 1个进程正在运行
    168 sleeping 168个进程正在休眠
    0 stopped 0个停止运行
    0 zombie 0个僵尸进程
    %Cpu(s) 0.3 us 用户空间,用户运行的进程占用cpu的百分比
    0.6 sy 内核空间占用的百分比,IO,内存分配等,内核运行的进程占用cpu的百分比
    0.0 ni 优先级进程,没有指定优先级即为0,用户自定义优先级的进程占用cpu的百分比
    99.1 id cpu空闲百分比
    0.1 wa 等待磁盘io的操作时间,过大的话cpu和硬盘性能差异过大
    0.0 hi 硬中断,硬件中断进程占用cpu的百分比/时间
    0.0 si 软中断,软件发送的中断消息
    0.0 st 表示虚拟机等待cpu的时间
    3729.3 total 当前的内存总量以m为单温,使用free命令可以查看内存
    277.6 free 空闲的内存
    1798.5 used 使用的内存
    1940.8 buff/cach 
    0.0 total, 交换分区总量
    0.0 free, 空闲的交换分区
    0.0 used. 使用的交换分区
    1930.8 avail Mem 可用的内存大小
    ````top -d1`设置1秒刷新一次
    
    按 `1` 将每颗逻辑cpu资源信息都列出来
    
    按 `M` 以内存进行排序
    
    按 `m` 将内存总量以进度条形式列出
    
    按 `P` 以cpu进行排序
    
    按 `C` 查看命令的全称
    
    按 `T` 会根据进程占用时间排序
    
    按 `f` 可以选择要显示的内容
    
    按 `k` 输入PID 可以干掉进程
    
    使用 `ps -p [pid]`可以查看指定进程
    
    孤儿进程和僵尸进程
    
    孤儿进程:子进程在运行过程中,父进程因各种原因关闭。(会有PID为1的系统进程接管关闭)
    
    僵尸进程:子进程在运行过程中,父进程因各种原因不回复子进程的消息,疯狂占用资源
    
    `pgrep`通过信息查询进程
    
    `-U`通过用户名查询进行
    
    `-G`通过用户组查询
    
    `-u`通过用户的UID查询
    
    `-g`通过GID查询
    
    `-P`通过父进程查询子进程
    
    `-l`打印命令
    
    `-o`如果后台同时有多个相同的进程,查找最早运行的进程```
    pgrep -o vim -l
    ````-n`如果后台同时有多个相同的进程,查找最后运行的进程
    
    `-d`指定分隔符(shell常用
    
    `pidof`根据进程名进行查询
    
    `pgrep` 模糊查询
    
    `pidof` 精确查询
    
    ---
    
    进程之间的通信方式
    
    管道、**信号**、消息队列、共享内存、socket套接字等
    
    Linux中默认使用信号进行通信
    
    当进程接收到信号后,优先执行信号的操作
    
    内核产生信号;用户手动产生的信号
    
    `kill`命令是一个信号工具,他不只是能干掉进程,默认使用kill使用的是15号信号也就是干掉进程
    
    `kill -l`可以列出所有信息
    
    `kill -15 1510`向1510程序发送15号信号
    
    `singnal 15` 默认,关闭程序
    
    `singnal 9` 强制退出(会导致文件损坏
    
    `singnal 1`重新加载配置文件
    
    `killall [进程名]`会一并关闭所有同名的进程,例如vim
    
    pkill
    
    可以结束一个终端、一个用户的所有进程
    
    `pkill -kill -t tty/2` 踢掉一个用户
    
    `pkill -9 -t tty/2` 踢掉一个用户
    
    `pkill -t tty/2`结束一个终端的所有进程
    
    `pkil -u [用户名]`结束一个用户的所有进程
    
    `pkill -9 vim`强制结束进程
    
    进程的优先级
    
    在系统繁忙的时候,高优先级的进程优先分配cpu资源,优先级越高越优先分配cpu资源
    
    Linux中有两种优先级:
    
    - `PR`动态优先级(内核自动调整
    
    - `NI`静态优先级(用户手动调整
    
    `NI`静态优先级的范围:`-20~19`(数字越小,优先级越高)
    
    **只有root用户可以调整`NI`静态优先级**
    
    ---
    
    `renice`命令
    
    修改已经启动的进程的静态优先级
    
    `renice -n [优先级] [PID]`
    
    `nice`命令
    
    在启动时调整进程的静态优先级
    
    `nice -n [优先级] [执行的命令]`
    
    ---
    
    后台作业
    
    将一个进程放入到后台执行,让前端终端能够输入命令,不被进程占用
    
    **后台作业仅用于本终端,不可跨终端**
    
    使用 `&`符号,即可放入后台执行
    
    `ping baidu.com &`
    
    `jobs` 查看当前终端运行的作业
    
    `kill %[作业号]`结束作业
    
    `Ctrl + z`将前台运行的作业放入后台并停止 或 `kill -19`这个我没理解
    
    `bg %[作业号]`后台运行作业
    
    `fg %[作业号]`前台运行作业
    主楼
  • xuanxuan

    Linux学习之进程,哪个进程又又又变成僵尸进程了,让我找找看^-^


    等多出几个知识点,可以弄个主贴做导航,相当于目录,

    图片

    不说了,前排支持

    #1
  • 双持金枪客-linuxdo

    想问下佬是怎么学习 Linux 相关知识的,我自己最近在看 b 站的教学视频,感觉不咋滴,知识分布也比较乱,还有就是学不下去^-^

    #2

发表回复

登录后回复