更新時間:2021-01-05 17:55:58 來源:動力節(jié)點 瀏覽1391次
進程是在處理器中執(zhí)行的實例,Linux內(nèi)核調(diào)度各類資源來滿足進程的需求。Linux的進程管理方式類似于Unix的進程管理方式,包含進程調(diào)度、中斷處理、信號、進程優(yōu)先級、進程切換、進程狀態(tài)、進程的內(nèi)存等等,這些管理方式的實現(xiàn)都需要Linux進程管理命令。
下面我們來看看Linux進程管理命令:
1.查看進程 - ps。
[root ~]# ps -ef
UID ? ? ? ?PID ?PPID ?C STIME TTY ? ? ? ? ?TIME CMD
root ? ? ? ? 1 ? ? 0 ?0 Jun23 ? ? ? ? ?00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root ? ? ? ? 2 ? ? 0 ?0 Jun23 ? ? ? ? ?00:00:00 [kthreadd]
...
[root ~]# ps -ef | grep mysqld
root ? ? ?4943 ?4581 ?0 22:45 pts/0 ? ?00:00:00 grep --color=auto mysqld
mysql ? ?25257 ? ? 1 ?0 Jun25 ? ? ? ? ?00:00:39 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
2.顯示進程狀態(tài)樹 - pstree。
[root ~]# pstree
systemd─┬─AliYunDun───18*[{AliYunDun}]
? ? ? ? ├─AliYunDunUpdate───3*[{AliYunDunUpdate}]
? ? ? ? ├─2*[agetty]
? ? ? ? ├─aliyun-service───2*[{aliyun-service}]
? ? ? ? ├─atd
? ? ? ? ├─auditd───{auditd}
? ? ? ? ├─dbus-daemon
? ? ? ? ├─dhclient
? ? ? ? ├─irqbalance
? ? ? ? ├─lvmetad
? ? ? ? ├─mysqld───28*[{mysqld}]
? ? ? ? ├─nginx───2*[nginx]
? ? ? ? ├─ntpd
? ? ? ? ├─polkitd───6*[{polkitd}]
? ? ? ? ├─rsyslogd───2*[{rsyslogd}]
? ? ? ? ├─sshd───sshd───bash───pstree
? ? ? ? ├─systemd-journal
? ? ? ? ├─systemd-logind
? ? ? ? ├─systemd-udevd
? ? ? ? └─tuned───4*[{tuned}]
3.查找與指定條件匹配的進程 - pgrep。
[root ~]$ pgrep mysqld
3584
4.通過進程號終止進程 - kill。
[root ~]$ kill -l
?1) SIGHUP ? ? ? 2) SIGINT ? ? ? 3) SIGQUIT ? ? ?4) SIGILL ? ? ? 5) SIGTRAP
?6) SIGABRT ? ? ?7) SIGBUS ? ? ? 8) SIGFPE ? ? ? 9) SIGKILL ? ? 10) SIGUSR1
11) SIGSEGV ? ? 12) SIGUSR2 ? ? 13) SIGPIPE ? ? 14) SIGALRM ? ? 15) SIGTERM
16) SIGSTKFLT ? 17) SIGCHLD ? ? 18) SIGCONT ? ? 19) SIGSTOP ? ? 20) SIGTSTP
21) SIGTTIN ? ? 22) SIGTTOU ? ? 23) SIGURG ? ? ?24) SIGXCPU ? ? 25) SIGXFSZ
26) SIGVTALRM ? 27) SIGPROF ? ? 28) SIGWINCH ? ?29) SIGIO ? ? ? 30) SIGPWR
31) SIGSYS ? ? ?34) SIGRTMIN ? ?35) SIGRTMIN+1 ?36) SIGRTMIN+2 ?37) SIGRTMIN+3
38) SIGRTMIN+4 ?39) SIGRTMIN+5 ?40) SIGRTMIN+6 ?41) SIGRTMIN+7 ?42) SIGRTMIN+8
43) SIGRTMIN+9 ?44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 ?56) SIGRTMAX-8 ?57) SIGRTMAX-7
58) SIGRTMAX-6 ?59) SIGRTMAX-5 ?60) SIGRTMAX-4 ?61) SIGRTMAX-3 ?62) SIGRTMAX-2
63) SIGRTMAX-1 ?64) SIGRTMAX
[root ~]# kill 1234
[root ~]# kill -9 1234
例子:用一條命令強制終止正在運行的Redis進程。
ps -ef | grep redis | grep -v grep | awk '{print $2}' | xargs kill
5.通過進程名終止進程 - killall / pkill。
結(jié)束名為mysqld的進程。
[root ~]# pkill mysqld
結(jié)束hellokitty用戶的所有進程。
[root ~]# pkill -u hellokitty
說明:這樣的操作會讓hellokitty用戶和服務(wù)器斷開連接。
6.將進程置于后臺運行。
Ctrl+Z - 快捷鍵,用于停止進程并置于后臺。
& - 將進程置于后臺運行。
[root ~]# mongod &
[root ~]# redis-server
...
^Z
[4]+ ?Stopped ? ? ? ? ? ? ? ? redis-server
7.查詢后臺進程 - jobs。
[root ~]# jobs
[2] ? Running ? ? ? ? ? ? ? ? mongod &
[3]- ?Stopped ? ? ? ? ? ? ? ? cat
[4]+ ?Stopped ? ? ? ? ? ? ? ? redis-server
8.讓進程在后臺繼續(xù)運行 - bg。
[root ~]# bg %4
[4]+ redis-server &
[root ~]# jobs
[2] ? Running ? ? ? ? ? ? ? ? mongod &
[3]+ ?Stopped ? ? ? ? ? ? ? ? cat
[4]- ?Running ? ? ? ? ? ? ? ? redis-server &
9.將后臺進程置于前臺 - fg。
[root ~]# fg %4
redis-server
說明:置于前臺的進程可以使用Ctrl+C來終止它。
10.調(diào)整程序/進程運行時優(yōu)先級 - nice / renice。
11.用戶登出后進程繼續(xù)工作 - nohup。
[root ~]# nohup ping www.baidu.com > result.txt &
12.跟蹤進程系統(tǒng)調(diào)用情況 - strace。
[root ~]# pgrep mysqld
8803
[root ~]# strace -c -p 8803
strace: Process 8803 attached
^Cstrace: Process 8803 detached% time ? ? seconds ?usecs/call ? ? calls ? ?errors syscall
------ ----------- ----------- --------- --------- ----------------
?99.18 ? ?0.005719 ? ? ? ?5719 ? ? ? ? 1 ? ? ? ? ? restart_syscall
? 0.49 ? ?0.000028 ? ? ? ? ?28 ? ? ? ? 1 ? ? ? ? ? mprotect
? 0.24 ? ?0.000014 ? ? ? ? ?14 ? ? ? ? 1 ? ? ? ? ? clone
? 0.05 ? ?0.000003 ? ? ? ? ? 3 ? ? ? ? 1 ? ? ? ? ? mmap
? 0.03 ? ?0.000002 ? ? ? ? ? 2 ? ? ? ? 1 ? ? ? ? ? accept
------ ----------- ----------- --------- --------- ----------------
100.00 ? ?0.005766 ? ? ? ? ? ? ? ? ? ? 5 ? ? ? ? ? total
說明:這個命令的用法和參數(shù)都比較復(fù)雜,建議大家在真正用到這個命令的時候再根據(jù)實際需要進行了解。
13.查看當(dāng)前運行級別 - runlevel。
[root ~]# runlevel
N 3
14.實時監(jiān)控進程占用資源狀況 - top。
[root ~]# top
top - 23:04:23 up 3 days, 14:10, ?1 user, ?load average: 0.00, 0.01, 0.05
Tasks: ?65 total, ? 1 running, ?64 sleeping, ? 0 stopped, ? 0 zombie%Cpu(s): ?0.3 us, ?0.3 sy, ?0.0 ni, 99.3 id, ?0.0 wa, ?0.0 hi, ?0.0 si, ?0.0 st
KiB Mem : ?1016168 total, ? 191060 free, ? 324700 used, ? 500408 buff/cache
KiB Swap: ? ? ? ?0 total, ? ? ? ?0 free, ? ? ? ?0 used. ? 530944 avail Mem
...
public class HelloWorld {
public static void main(String[] args) {
System.out.println("動力節(jié)點-口口相傳的Java黃埔軍校");
}
}
1.-c - 顯示進程的整個路徑。
2.-d - 指定兩次刷屏之間的間隔時間(秒為單位)。
3.-i - 不顯示閑置進程或僵尸進程。
4.-p - 顯示指定進程的信息。
事實上,Linux系統(tǒng)中的每個進程都有自己生命周期,比如創(chuàng)建、執(zhí)行、終止和刪除。只要掌握了進程的生命周期的變化,結(jié)合Linux進程管理命令,對于我們管理Linux進程來說就是手到擒來。想詳細了解Linux進程管理中涉及到的相關(guān)知識,推薦觀看本站的Linux教程,帶你快速掌握Linux進程管理的整個過程。
初級 202925
初級 203221
初級 202629
初級 203743