文章目录
- Linux 进程管理:从入门到 “杀不掉的进程” 终极解法
-
- Linux 进程管理
-
- 进程介绍
-
- 进程是什么
- 进程产生-fork
- 进程状态
- 查看进程-ps
- 控制 jobs
- 给进程发信号
-
- 信号介绍
- kill 命令
- pkill 和 pgrep 命令
- whoami-who-w-last 命令
- 案例:kill 不掉的进程
- 思路一:把 md5sum 程序删除,使用 mv 模拟
- 移回去
- [root@centos7 ~]# mv ./md5sum /bin/md5sum
- 思路二:找到幕后推手,也就是找到父进程
Linux 进程管理:从入门到 “杀不掉的进程” 终极解法
Linux 进程管理
进程介绍
进程是 Linux 系统中资源分配和调度的基本单位,是程序运行的实例,包含代码、数据、资源(文件句柄、内存)和状态等信息。进程管理是系统运维的核心技能,涵盖进程创建、状态监控、信号控制、资源调度与回收等全流程操作。
- 程序:没有运行的可执行文件。
- 软件:包含程序、手册、配置文件等全套的东西。软件工程。
- 进程:程序运行后,会使用cpu、内存、磁盘、网络等资源。
- 线程:将程序划分成更小的执行单元。
进程是什么
进程是已启动的可执行程序的运行中实例。
进程由以下组成部分:
- 已分配内存的地址空间
- 安全属性,包括所有权凭据和特权
- 程序代码的一个或多个执行线程
- 进程状态
进程的环境包括:
- 本地和全局变量
- 当前调度上下文
- 分配的系统资源,如文件描述符和网络端口
进程产生-fork
| 1 | 初始进程 process | fork() | 系统调用创建新进程,分裂为父进程和子进程两个分支,两者共享大部分资源(写时复制)。 |
| 2 | 父进程 parent process | wait() | 父进程主动阻塞,等待子进程退出并回收其资源。 |
| 3 | 子进程 child process | exec() | 子进程调用exec()系列函数,加载并执行新程序,替换自身的地址空间,PID 不变。 |
| 4 | 子进程 child process | exit() | 子进程执行完成后调用exit()退出,释放大部分资源,仅保留进程描述符和退出状态。 |
| 5 | 父进程 parent process | 收到子进程退出信号 | 父进程结束阻塞,回收子进程的退出状态和剩余资源,子进程被彻底清除。 |
| 6 | 特殊情况:子进程退出,父进程未wait() | – | 子进程成为僵尸进程(zombie),保留 PID 和退出状态,等待父进程调用wait()回收。 |
| 7 | 最终状态 | – | 父进程继续运行,子进程彻底消亡;若为僵尸进程,需父进程回收或父进程退出后由init进程收养回收。 |
# 当前bash中执行sleep,此时的sleep进程就是通过fork产生
# sleep进程是bash进程的子进程
[myz@centos7 ~]$ sleep 5
进程状态
补充:操作系统主要职责。
任务管理
设备管理
文件系统
内存管理
| Running | R | TASK_RUNNING:进程正在 CPU 上执行,或者正在等待运行。处于运行中(或可运行)状态时,进程可能正在执行用户例程或内核例程(系统调用),或者已排队并就绪。 |
| Sleeping | S | TASK_INTERRUPTIBLE:进程正在等待某一条件:硬件请求、系统资源访问或信号。当事件或信号满足该条件时,该进程将返回到运行中。 |
| Sleeping | D | TASK_UNINTERRUPTIBLE:此进程也在睡眠,与 S 状态不同,不会响应信号。进程中断可能会导致意外设备状态的情况。 |
| Sleeping | K | TASK_KILLABLE:与不可中断的 D 状态相同,但有所修改,允许等待中的任务响应要被中断(彻底退出)的信号。实用程序通常将可中断的进程显示为 D 状态。 |
| Sleeping | I | TASK_REPORT_IDLE:D 状态的一个子集。在计算负载平均值时,内核不会统计这些进程。用于内核线程。设置了 TASK_UNINTERRUPTABLE 和 TASK_NOLOAD 标志。它接受致命信号。 |
| Stopped | T | TASK_STOPPED:进程已被停止(暂停),通常是通过用户或其他进程发出的信号。进程可以通过另一信号返回到运行中状态,继续执行(恢复)。 |
| Stopped | t | TASK_TRACED:正在被调试的进程也会临时停止,并且共享同一个 T 状态标。 |
| Zombie | Z | EXIT_ZOMB:子进程在退出时向父进程发出信号。除进程身份 (PID) 之外的所有资源都已释放。 |
| Zombie | X | EXIT_DEAD:当父进程清理(获取)剩余的子进程结构时,进程现在已彻底释放。此状态从不会在进程列出实用程序中看到。 |
查看进程-ps
**作用:**查看系统中进程信息。
ps 命令选项分为两类:
- 限定查看哪些进程,用来选择进程。
- 对选定的进程查看他们哪些属性。
支持三种版本选项:
- UNIX,使用单个 –
- GNU,使用两个 —
- BSD,不使用 –
[myz@centos7 ~ 16:48:07]$ ps -e
PID TTY TIME CMD
1 ? 00:00:01 systemd
2 ? 00:00:00 kthreadd
4 ? 00:00:00 kworker/0:0H
6 ? 00:00:00 ksoftirqd/0
... ...
# PID,进程ID
# TTY,进程所在终端
# TIME,进程使用cpu的有效时间,并不是程序的运行时间。
# CMD,进程名称
[myz@centos7 ~ 17:02:49]$ ps -ef | head -n 5
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 09:36 ? 00:00:01 /usr/lib/systemd/systemd –switched-root –system –deserialize 22
root 2 0 0 09:36 ? 00:00:00 [kthreadd]
root 4 2 0 09:36 ? 00:00:00 [kworker/0:0H]
root 6 2 0 09:36 ? 00:00:00 [ksoftirqd/0]
# UID,进程的执行者
# PPID,进程的父进程ID
# C,进程消耗的CPU百分比
# STIME,进程的开始执行的时刻
查看特定用户运行的进程
[myz@centos7 ~ 17:03:23]$ ps -u myz u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
myz 1897 0.0 0.1 317428 5884 ? Sl 09:36 0:00 /usr/bin/gnome-keyring-
myz 1920 0.0 0.2 745244 11328 ? Ssl 09:36 0:00 /usr/libexec/gnome-sess
myz 1929 0.0 0.0 59016 972 ? S 09:36 0:00 dbus-launch –sh-syntax
......
查看特定终端中进程
[myz@centos7 ~ 17:04:18]$ ps -t pts/1 u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 4246 0.0 0.0 116324 2788 pts/1 Ss+ 11:30 0:00 -bash
查看所有进程
[myz@centos7 ~ 17:04:39]$ ps axu
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 128428 7016 ? Ss 09:36 0:01 /usr/lib/systemd/system
root 2 0.0 0.0 0 0 ? S 09:36 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 09:36 0:00 [kworker/0:0H]
... ...
查看进程树
[myz@centos7 ~ 17:05:04]$ ps axf
PID TTY STAT TIME COMMAND
2 ? S 0:00 [kthreadd]
4 ? S< 0:00 \\_ [kworker/0:0H]
6 ? S 0:00 \\_ [ksoftirqd/0]
7 ? S 0:00 \\_ [migration/0]
8 ? S 0:00 \\_ [rcu_bh]
9 ? S 0:03 \\_ [rcu_sched]
... ...
1215 ? Ss 0:00 /usr/sbin/cupsd -f
1216 ? Ss 0:00 /usr/sbin/sshd -D
2699 ? Ss 0:00 \\_ sshd: myz [priv]
2703 ? S 0:00 | \\_ sshd: myz@pts/0
2708 pts/0 Ss 0:00 | \\_ -bash
11655 pts/0 R+ 0:00 | \\_ ps axf
4234 ? Ss 0:00 \\_ sshd: root@pts/1
4246 pts/1 Ss+ 0:00 | \\_ -bash
6438 ? Ss 0:00 \\_ sshd: myz [priv]
6442 ? S 0:00 \\_ sshd: myz@pts/2
6447 pts/2 Ss+ 0:00 \\_ -bash
1219 ? Ssl 0:01 /usr/sbin/rsyslogd -n
1221 ? Ssl 0:00 /usr/sbin/libvirtd
1230 ? Ssl 0:00 /usr/sbin/gdm
1599 tty1 Ssl+ 0:00 \\_ /usr/bin/X :0 -background none -noreset -audit 4 -verbose
1886 ? Sl 0:00 \\_ gdm-session-worker [pam/gdm-password]
1920 ? Ssl 0:00 \\_ /usr/libexec/gnome-session-binary –session gnome-cla
2050 ? Ss 0:00 \\_ /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash –
2106 ? Sl 0:06 \\_ /usr/bin/gnome-shell
2131 ? Sl 0:00 | \\_ ibus-daemon –xim –panel disable
2135 ? Sl 0:00 | \\_ /usr/libexec/ibus-dconf
2414 ? Sl 0:00 | \\_ /usr/libexec/ibus-engine-simple
2268 ? Sl 0:00 \\_ /usr/libexec/gsd-power
... ...
查看特定进程特定属性
# 通过PID限定
[myz@centos7 ~ 17:06:38]$ ps -o pid,%cpu,%mem,command 2389
PID %CPU %MEM COMMAND
2389 0.0 0.1 /usr/libexec/gvfsd-trash –spawner :1.4 /org/gtk/gvfs/exec_spaw/0
# 通过命令名称限定
[myz@centos7 ~]$ ps -C passwd -o pid,ruser,euser,command
PID RUSER EUSER COMMAND
4432 myz root passwd
对进程进行排序,–sort %cpu升序 ,–sort -%cpu降序
[myz@centos7 ~ 17:07:19]$ ps axu –sort -%cpu
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 128428 7016 ? Ss 09:36 0:01 /usr/lib/systemd/system
root 2 0.0 0.0 0 0 ? S 09:36 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 09:36 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 09:36 0:00 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S 09:36 0:00 [migration/0]
......
控制 jobs
作业控制允许单个shell实例运行和管理多个命令。
- 前台进程,一个终端中只有一个前台进程,该进程可以终端窗口中读取输入和响应键盘生成的信号。
- 后台进程,在后台运行的进程,该进程不能从终端读取输入或接收键盘产生的中断。后台进程可能暂停,也可能正在运行。如果正在运行的后台作业尝试从终端读取,它将自动暂停。在ps列表中,tty终端列显示的是?号,那么该进程肯定是后台进程,但并代表显示为其他终端的进程就不是后台进程。
示例:
# 生成自定义脚本 study
[myz@centos7 ~ 17:09:07]$ cat << 'EOF' > /usr/local/bin/study
> #!/bin/bash
> while true
> do
> echo "$(date): I'm studying [ $@ ]" >> study.log
> sleep 1
> done
> EOF
# 赋予脚本可执行权限
[myz@centos7 ~ 17:12:27]$ chmod +x /usr/local/bin/study
# 后台运行脚本,传入参数 linux
[myz@centos7 ~ 17:13:09]$ study linux &
[1] 11760
# 查看当前终端后台任务
[myz@centos7 ~ 17:15:03]$ jobs
[1]+ Running study linux &
# 再后台启动脚本,传入参数 python
[myz@centos7 ~ 17:15:06]$ study python &
[2] 11839
# 实时跟踪日志文件内容
[myz@centos7 ~ 16:21:48]$ tail -f study.log
Tue Jul 21 17:15:10 CST 2026: I'm studying [ linux ]
Tue Jul 21 17:15:11 CST 2026: I'm studying [ linux ]
# 再次查看后台任务状态
[myz@centos7 ~ 17:17:20]$ jobs
[1] Running study linux &
[2]– Running study python &
[3]+ Stopped study python
# 将编号为3的暂停任务恢复到后台运行
[myz@centos7 ~ 17:17:42]$ bg %3
[3]+ study python &
# 再次执行恢复后台任务操作
[myz@centos7 ~ 17:17:42]$ bg %3
[3]+ study python &
清理实验:
# 将后台任务1调至前台运行,执行后按 Ctrl+C 终止进程
[myz@centos7 ~ 17:18:07]$ fg %1
study linux
^C
# 将后台任务2调至前台运行,执行后按 Ctrl+C 终止进程
[myz@centos7 ~ 17:21:42]$ fg %2
study python
^C
# 将后台任务3调至前台运行,执行后按 Ctrl+C 终止进程
[myz@centos7 ~ 17:21:47]$ fg %3
study python
^C
# 查看当前终端后台任务,无输出代表所有后台进程已全部结束
[myz@centos7 ~ 17:21:57]$ jobs
[myz@centos7 ~ 17:22:00]$
思考: passwd命令是否在后台运行?
答:需要交互的进程是无法在后台运行的。
[myz@centos7 ~]$ passwd &
[3] 3135
[myz@centos7 ~]$ 更改用户 myz 的密码 。
[1]+ 已停止 passwd
思考:如何避免意外断网和关闭终端,导致终端中后台运行的进程终止?
例如:服务器在国外,给服务器打补丁包,打补丁大概需要2个小时。
方法:nohub commnad &
[myz@centos7 ~]$ nohup study English &
给进程发信号
信号介绍
signal 是传递给进程的软中断。
生成信号的事件可以是错误,外部事件或者使用信号发送命令或键盘序列。
| 1 | HUP | 挂起 | 用于报告终端控制进程的终止,也用于请求进程重新初始化(重新加载配置)而不终止。 |
| 2 | INT | 键盘中断 | 导致程序终止。可以被拦截或处理。通过按键序列 (Ctrl+c) 发送。 |
| 3 | QUIT | 键盘退出 | 与 INT 相似:在终止时添加进程转储。通过按键序列 (Ctrl+) 发送。 |
| 9 | KILL | 中断,无法拦截 | 导致立即终止程序。无法被拦截、忽略或处理;总是致命的。 |
| 15 | TERM | 终止 | kill 相关命令,默认信号,导致程序终止。和 KILL 不同,可以被拦截、忽略或处理。要求程序终止的 “友好” 方式;允许自我清理。 |
| 18 | CONT | 继续 | 发送至进程使其恢复(若已停止)。无法被拦截。即使被处理,也始终恢复进程。 |
| 19 | STOP | 停止,无法拦截 | 暂停进程。无法被拦截或处理。 |
| 20 | TSTP | 键盘停止 | 和 STOP 不同,可以被拦截、忽略或处理。通过按 SUSP 键序列 (Ctrl+z) 发送。 |
kill 命令
作用:给进程发信号。
# 准备脚本
[root@centos7 ~]# cat << 'EOF' > /usr/local/bin/study
#!/bin/bash
while true
do
echo "$(date): I'm studying [ $@ ]" >> study.log
sleep 1
done
EOF
[root@centos7 ~]# chmod +x /usr/local/bin/study
# 后台运行study脚本,传参linux,任务编号1,PID=13897
[myz@centos7 ~ 17:22:07]$ study linux &
[1] 13897
# 后台运行study脚本,传参python,任务编号2,PID=13912
[myz@centos7 ~ 17:25:24]$ study python &
[2] 13912
# 查看系统所有信号编号与名称
[myz@centos7 ~ 17:25:31]$ kill -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
# 发送19号SIGSTOP信号,暂停任务1
[myz@centos7 ~ 17:25:35]$ kill -19 %1
[1]+ Stopped study linux
# 查看终端后台任务状态
[myz@centos7 ~ 17:25:47]$ jobs
[1]+ Stopped study linux
[2]– Running study python &
# 发送18号SIGCONT信号,恢复暂停的任务1继续运行
[myz@centos7 ~ 17:25:49]$ kill -18 %1
[myz@centos7 ~ 17:25:56]$ jobs
[1]+ Running study linux &
[2]– Running study python &
# 发送SIGTERM(15号)信号,正常终止任务2
[myz@centos7 ~ 17:26:01]$ kill -SIGTERM %2
[myz@centos7 ~ 17:26:15]$ jobs
[1]+ Running study linux &
[2]– Terminated study python
# 再次查看后台任务,任务2已结束
[myz@centos7 ~ 17:26:17]$ jobs
[1]+ Running study linux &
# 直接使用默认15号SIGTERM信号,终止任务1
[myz@centos7 ~ 17:26:21]$ kill %1
[1]+ Terminated study linux
# 查看后台任务,无任务残留,全部结束
[myz@centos7 ~ 17:26:26]$ jobs
[myz@centos7 ~ 17:26:29]$
pkill 和 pgrep 命令
作用:给多个进程发信号。
# 同时后台启动三个sleep进程,分别休眠1231/1232/1233秒
[myz@centos7 ~ 17:26:45]$ sleep 1231 & sleep 1232 & sleep 1233 &
[1] 14114
[2] 14115
[3] 14116
# pgrep 查找所有sleep进程,仅输出PID
[myz@centos7 ~ 17:28:10]$ pgrep sleep
14114
14115
14116
14132
# pgrep -l 查找sleep进程,同时显示PID和进程名
[myz@centos7 ~ 17:29:39]$ pgrep -l sleep
14114 sleep
14115 sleep
14116 sleep
14132 sleep
# 全格式查看进程,筛选含sleep的进程;最后一行为grep自身进程
[myz@centos7 ~ 17:29:45]$ ps axu|grep sleep
myz 14114 0.0 0.0 108052 356 pts/0 S 17:28 0:00 sleep 1231
myz 14115 0.0 0.0 108052 356 pts/0 S 17:28 0:00 sleep 1232
myz 14116 0.0 0.0 108052 360 pts/0 S 17:28 0:00 sleep 1233
root 14132 0.0 0.0 108052 356 ? S 17:29 0:00 sleep 60
myz 14136 0.0 0.0 112808 976 pts/0 S+ 17:29 0:00 grep –color=auto slee
# pkill 批量终止所有sleep进程;普通用户无法杀死root权限进程,提示权限不足
[myz@centos7 ~ 17:29:54]$ pkill sleep
pkill: killing pid 14132 failed: Operation not permitted
[1] Terminated sleep 1231
[2]– Terminated sleep 1232
[3]+ Terminated sleep 1233
# 再次筛选sleep进程,自己启动的进程已全部结束,仅保留root的sleep进程
[myz@centos7 ~ 17:30:02]$ ps axu|grep sleep
root 14132 0.0 0.0 108052 356 ? S 17:29 0:00 sleep 60
myz 14157 0.0 0.0 112808 976 pts/0 R+ 17:30 0:00 grep –color=auto slee
# 重复查询,结果同上,root进程依旧运行
[myz@centos7 ~ 17:30:05]$ ps axu|grep sleep
root 14132 0.0 0.0 108052 356 ? S 17:29 0:00 sleep 60
myz 14159 0.0 0.0 112808 976 pts/0 R+ 17:30 0:00 grep –color=auto slee
[myz@centos7 ~ 17:32:26]$ pgrep -u myz
1897
1920
如果pgrep无法过滤出具有特定特征的进程,使用ps和kill配合完成。
# 环境准备
# root用户执行yum命令,安装Apache网页服务httpd
[root@centos7 ~ 18:33:36]# yum install httpd
# 出现yum数据库锁释放提示,加载yum插件与镜像源
BDB2053 Freeing read locks for locker 0x4d8: 10315/140629270779712
BDB2053 Freeing read locks for locker 0x4da: 10315/140629270779712
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
... ...
Z
# 按下 Ctrl+Z 将前台yum安装进程暂停,转入后台停止状态
[1]+ Stopped yum install httpd
# 查找系统中包含yum的所有进程
[root@centos7 ~ 18:34:06]# ps axu | grep yum
# PID 14880:被Ctrl+Z暂停的yum安装进程,状态 T(暂停态)
root 14880 3.2 2.7 1064116 109184 pts/0 T 18:33 0:01 /usr/bin/python /bin/yum install httpd
# PID 14915:当前执行的grep自身进程,正常睡眠状态 S
root 14915 0.0 0.0 112808 972 pts/0 S+ 18:34 0:00 grep –color=auto yum
[root@centos7 ~ 18:34:36]# ps axu | grep yum |grep -v grep | awk '{print $2}'
14880
[root@centos7 ~ 18:35:31]# pkill -9 yum
whoami-who-w-last 命令
# 查看当前登录的用户名
[myz@centos7 ~ 18:36:08]$ whoami
myz
# 查看当前系统所有已登录用户、终端、登录时间与来源地址
[myz@centos7 ~ 18:36:11]$ who
myz :0 2026-07-21 09:36 (:0)
myz pts/0 2026-07-21 09:37 (10.1.8.1)
root pts/1 2026-07-21 11:31 (10.1.8.1)
myz pts/2 2026-07-21 13:49 (10.1.8.1)
# 查看系统运行时长、在线用户、负载、各终端用户及正在执行的命令
[myz@centos7 ~ 18:36:14]$ w
18:36:15 up 8:59, 4 users, load average: 0.01, 0.02, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
myz :0 :0 09:36 ?xdm? 1:50 0.20s /usr/libexec/gnome-sessi
myz pts/0 10.1.8.1 09:37 7.00s 1.32s 0.00s w
root pts/1 10.1.8.1 11:31 7:05m 0.00s 0.00s -bash
myz pts/2 10.1.8.1 13:49 1:20m 0.11s 0.11s -bash
# 查看系统历史登录记录、重启记录,按时间倒序展示
[myz@centos7 ~ 18:36:15]$ last
myz pts/2 10.1.8.1 Tue Jul 21 13:49 still logged in
myz pts/2 10.1.8.1 Tue Jul 21 13:48 – 13:49 (00:01)
root pts/1 10.1.8.1 Tue Jul 21 11:31 still logged in
myz pts/2 10.1.8.1 Tue Jul 21 10:48 – 13:48 (02:59)
root pts/1 10.1.8.1 Tue Jul 21 09:37 – 11:30 (01:53)
myz pts/0 10.1.8.1 Tue Jul 21 09:37 still logged in
myz :0 :0 Tue Jul 21 09:36 still logged in
reboot system boot 3.10.0-1160.71.1 Tue Jul 21 09:36 – 18:36 (08:59)
... ...
案例:kill 不掉的进程
一个进程杀掉之后,又出现了。怎么让这个程序永久 kill 掉?
模拟:
# 准备程序
[myz@centos7 ~]$ mkdir bin
[myz@centos7 ~]$ cat > bin/mm <<EOF
#!/bin/bash
while true
do
md5sum /dev/zero
sleep 1
done
EOF
[myz@centos7 ~]$ chmod +x bin/mm
# 执行程序
[myz@centos7 ~]$ nohup mm &
处理过程
# 查找进程
[myz@centos7 ~]$ ps axo pid,%cpu,command –sort -%cpu |head -n 5
PID %CPU COMMAND
73712 99.7 md5sum /dev/zero
1150 0.1 /usr/libexec/platform-python -Es /usr/sbin/tuned -l -P
1786 0.1 /usr/libexec/packagekitd
69280 0.1 /usr/bin/gnome-shell
# kill 进程,再次查看
[myz@centos7 ~]$ kill 73712
[myz@centos7 ~]$ ps axo pid,%cpu,command –sort -%cpu |head -n 5
PID %CPU COMMAND
74830 99.8 md5sum /dev/zero
1150 0.1 /usr/libexec/platform-python -Es /usr/sbin/tuned -l -P
1786 0.1 /usr/libexec/packagekitd
69280 0.1 /usr/bin/gnome-shell
# 思路一:把 md5sum 程序删除,使用 mv 模拟
[root@centos7 ~]# mv /bin/md5sum ./md5sum
# 移回去
# [root@centos7 ~]# mv ./md5sum /bin/md5sum
# 思路二:找到幕后推手,也就是找到父进程
[root@centos7 ~]# ps ax -f |grep -e md5sum -e PPID
UID PID PPID C STIME TTY STAT TIME CMD
myz 75538 73556 99 15:25 ? R 2:12 md5sum /dev/zero
root 76070 53920 0 15:28 pts/3 R+ 0:00 grep –color=auto -e md5sum -e PPID
[root@centos7 ~]# kill 73556 75538
latform-python -Es /usr/sbin/tuned -l -P 1786 0.1 /usr/libexec/packagekitd 69280 0.1 /usr/bin/gnome-shell
思路一:把 md5sum 程序删除,使用 mv 模拟
[root@centos7 ~]# mv /bin/md5sum ./md5sum
移回去
[root@centos7 ~]# mv ./md5sum /bin/md5sum
思路二:找到幕后推手,也就是找到父进程
[root@centos7 ~]# ps ax -f |grep -e md5sum -e PPID UID PID PPID C STIME TTY STAT TIME CMD myz 75538 73556 99 15:25 ? R 2:12 md5sum /dev/zero root 76070 53920 0 15:28 pts/3 R+ 0:00 grep –color=auto -e md5sum -e PPID [root@centos7 ~]# kill 73556 75538




