ผู้ดูแลระบบ Linux - การจัดการกระบวนการ
ต่อไปนี้เป็นคำสั่งทั่วไปที่ใช้กับ Process Management – bg, fg, nohup, ps, pstree, top, kill, killall, free, uptime, nice
ทำงานกับกระบวนการ
Quick Note: Process PID in Linux
ใน Linux ทุกกระบวนการที่รันจะได้รับ PID หรือ Process ID Number PIDนี้เป็นวิธีที่ CentOS ระบุกระบวนการเฉพาะ ดังที่เราได้กล่าวไปแล้วsystemdเป็นกระบวนการแรกที่เริ่มต้นและให้ PID เป็น 1 ใน CentOS
Pgrep ใช้เพื่อรับ Linux PID สำหรับชื่อกระบวนการที่กำหนด
[root@CentOS]# pgrep systemd
1
[root@CentOS]#
ตามที่เห็นคำสั่งpgrepจะส่งคืน PID ปัจจุบันของ systemd
ขั้นตอนพื้นฐาน CentOS และการจัดการงานใน CentOS
เมื่อทำงานกับกระบวนการใน Linux สิ่งสำคัญคือต้องทราบว่ากระบวนการเบื้องหน้าและเบื้องหลังขั้นพื้นฐานดำเนินการอย่างไรที่บรรทัดคำสั่ง
fg - นำกระบวนการไปสู่เบื้องหน้า
bg - ย้ายกระบวนการไปที่พื้นหลัง
jobs - รายชื่อของกระบวนการปัจจุบันที่แนบมากับเชลล์
ctrl+z - คีย์ผสม Control + z เพื่อพักกระบวนการปัจจุบัน
& - เริ่มกระบวนการในพื้นหลัง
เริ่มต้นลองใช้คำสั่งเปลือกนอนหลับsleepก็จะทำตามที่มันเป็นชื่อการนอนหลับเป็นระยะเวลาที่กำหนดของเวลาการนอนหลับ
[root@CentOS ~]$ jobs
[root@CentOS ~]$ sleep 10 &
[1] 12454
[root@CentOS ~]$ sleep 20 &
[2] 12479
[root@CentOS ~]$ jobs
[1]- Running sleep 10 &
[2]+ Running sleep 20 &
[cnetos@CentOS ~]$
ตอนนี้ขอนำงานแรกสู่เบื้องหน้า -
[root@CentOS ~]$ fg 1
sleep 10
หากคุณทำตามคุณจะสังเกตเห็นว่างานเบื้องหน้าติดอยู่ในเปลือกของคุณ ตอนนี้ให้นำกระบวนการเข้าสู่โหมดสลีปจากนั้นเปิดใช้งานอีกครั้งในพื้นหลัง
- กดปุ่มควบคุม + z
- พิมพ์: bg 1 ส่งงานแรกไปยังพื้นหลังและเริ่มงาน
[root@CentOS ~]$ fg 1
sleep 20
^Z
[1]+ Stopped sleep 20
[root@CentOS ~]$ bg 1
[1]+ sleep 20 &
[root@CentOS ~]$
nohup
เมื่อทำงานจากเชลล์หรือเทอร์มินัลเป็นที่น่าสังเกตว่าโดยค่าเริ่มต้นกระบวนการและงานทั้งหมดที่แนบมากับเชลล์จะสิ้นสุดลงเมื่อปิดเชลล์หรือผู้ใช้ออกจากระบบ เมื่อใช้nohupกระบวนการจะทำงานต่อไปหากผู้ใช้ออกจากระบบหรือปิดเชลล์ที่เชื่อมต่อกับกระบวนการ
[root@CentOS]# nohup ping www.google.com &
[1] 27299
nohup: ignoring input and appending output to ‘nohup.out’
[root@CentOS]# pgrep ping
27299
[root@CentOS]# kill -KILL `pgrep ping`
[1]+ Killed nohup ping www.google.com
[root@CentOS rdc]# cat nohup.out
PING www.google.com (216.58.193.68) 56(84) bytes of data.
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 1 ttl = 128
time = 51.6 ms
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 2 ttl = 128
time = 54.2 ms
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 3 ttl = 128
time = 52.7 ms
คำสั่ง ps
psคำสั่งมักใช้โดยผู้ดูแลระบบเพื่อตรวจสอบภาพรวมของกระบวนการเฉพาะ psมักใช้กับgrepเพื่อกรองกระบวนการเฉพาะเพื่อวิเคราะห์
[root@CentOS ~]$ ps axw | grep python
762 ? Ssl 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork -nopid
1296 ? Ssl 0:00 /usr/bin/python -Es /usr/sbin/tuned -l -P
15550 pts/0 S+ 0:00 grep --color=auto python
ในคำสั่งด้านบนเราจะเห็นกระบวนการทั้งหมดโดยใช้ตัวแปลpython รวมทั้งยังมีผลที่ได้คำสั่ง grep เรามองหาสตริงหลาม
ต่อไปนี้เป็นบรรทัดคำสั่งที่พบมากที่สุดสวิทช์ใช้กับPS
สวิตซ์ | หนังบู๊ |
---|---|
ก | ไม่รวมข้อ จำกัด เฉพาะกระบวนการรายงานสำหรับผู้ใช้ปัจจุบัน |
x | แสดงกระบวนการที่ไม่ได้เชื่อมต่อกับ tty หรือเชลล์ |
ว | จัดรูปแบบการแสดงผลแบบกว้างของเอาต์พุต |
จ | แสดงสภาพแวดล้อมหลังคำสั่ง |
-e | เลือกกระบวนการทั้งหมด |
-o | เอาต์พุตที่จัดรูปแบบโดยผู้ใช้กำหนด |
-ยู | แสดงกระบวนการทั้งหมดโดยผู้ใช้เฉพาะ |
-ค | แสดงกระบวนการทั้งหมดตามชื่อหรือรหัสกระบวนการ |
- เรียงลำดับ | จัดเรียงกระบวนการตามคำจำกัดความ |
หากต้องการดูกระบวนการทั้งหมดที่ใช้โดยผู้ใช้ที่ไม่มีใคร -
[root@CentOS ~]$ ps -u nobody
PID TTY TIME CMD
1853 ? 00:00:00 dnsmasq
[root@CentOS ~]$
หากต้องการดูข้อมูลทั้งหมดเกี่ยวกับกระบวนการfirewalld -
[root@CentOS ~]$ ps -wl -C firewalld
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 0 762 1 0 80 0 - 81786 poll_s ? 00:00:01 firewalld
[root@CentOS ~]$
มาดูกันว่ากระบวนการใดใช้หน่วยความจำมากที่สุด -
[root@CentOS ~]$ ps aux --sort=-pmem | head -10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
cnetos 6130 0.7 5.7 1344512 108364 ? Sl 02:16 0:29 /usr/bin/gnome-shell
cnetos 6449 0.0 3.4 1375872 64440 ? Sl 02:16 0:00 /usr/libexec/evolution-calendar-factory
root 5404 0.6 2.1 190256 39920 tty1 Ssl+ 02:15 0:27 /usr/bin/Xorg :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-iDefCt/database -seat seat0 -nolisten tcp vt1
cnetos 6296 0.0 1.7 1081944 32136 ? Sl 02:16 0:00 /usr/libexec/evolution/3.12/evolution-alarm-notify
cnetos 6350 0.0 1.5 560728 29844 ? Sl 02:16 0:01 /usr/bin/prlsga
cnetos 6158 0.0 1.4 1026956 28004 ? Sl 02:16 0:00 /usr/libexec/gnome-shell-calendar-server
cnetos 6169 0.0 1.4 1120028 27576 ? Sl 02:16 0:00 /usr/libexec/evolution-source-registry
root 762 0.0 1.4 327144 26724 ? Ssl 02:09 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
cnetos 6026 0.0 1.4 1090832 26376 ? Sl 02:16 0:00 /usr/libexec/gnome-settings-daemon
[root@CentOS ~]$
ดูกระบวนการทั้งหมดตาม centos ผู้ใช้และรูปแบบโดยแสดงผลลัพธ์ที่กำหนดเอง -
[cnetos@CentOS ~]$ ps -u cnetos -o pid,uname,comm
PID USER COMMAND
5802 centos gnome-keyring-d
5812 cnetos gnome-session
5819 cnetos dbus-launch
5820 cnetos dbus-daemon
5888 cnetos gvfsd
5893 cnetos gvfsd-fuse
5980 cnetos ssh-agent
5996 cnetos at-spi-bus-laun
คำสั่ง pstree
pstreeคล้ายกับpsแต่ไม่ได้ใช้บ่อย จะแสดงกระบวนการในรูปแบบต้นไม้ที่เรียบง่าย
[centos@CentOS ~]$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─caribou───2*[{caribou}]
├─cgrulesengd
├─chronyd
├─colord───2*[{colord}]
├─crond
├─cupsd
เอาต์พุตทั้งหมดจากpstreeสามารถเกิน 100 บรรทัด โดยปกติแล้วpsจะให้ข้อมูลที่เป็นประโยชน์มากกว่า
คำสั่งด้านบน
topเป็นหนึ่งในคำสั่งที่ใช้บ่อยที่สุดเมื่อแก้ไขปัญหาด้านประสิทธิภาพใน Linux มีประโยชน์สำหรับสถิติแบบเรียลไทม์และการตรวจสอบกระบวนการใน Linux ต่อไปนี้เป็นเอาต์พุตเริ่มต้นของด้านบนเมื่อนำขึ้นมาจากบรรทัดคำสั่ง
Tasks: 170 total, 1 running, 169 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.3 us, 2.0 sy, 0.0 ni, 95.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1879668 total, 177020 free, 607544 used, 1095104 buff/cache
KiB Swap: 3145724 total, 3145428 free, 296 used. 1034648 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5404 root 20 0 197832 48024 6744 S 1.3 2.6 1:13.22 Xorg
8013 centos 20 0 555316 23104 13140 S 1.0 1.2 0:14.89 gnome-terminal-
6339 centos 20 0 332336 6016 3248 S 0.3 0.3 0:23.71 prlcc
6351 centos 20 0 21044 1532 1292 S 0.3 0.1 0:02.66 prlshprof
ปุ่มลัดทั่วไปที่ใช้ในขณะที่ทำงานด้านบน ( ปุ่มลัดสามารถเข้าถึงได้โดยการกดปุ่มขณะที่ปุ่มบนกำลังทำงานในเชลล์
คำสั่ง | หนังบู๊ |
---|---|
ข | เปิด / ปิดการไฮไลต์ตัวหนาที่เมนูด้านบน |
z | เปลี่ยนรูปแบบสี |
ล | วนรอบหัวข้อค่าเฉลี่ยการโหลด |
ม | วนรอบส่วนหัวค่าเฉลี่ยหน่วยความจำ |
t | หัวข้อข้อมูลงาน |
ซ | เมนูช่วยเหลือ |
Shift + F | ปรับแต่งฟิลด์การเรียงลำดับและการแสดงผล |
ต่อไปนี้เป็นบรรทัดคำสั่งทั่วไปสวิทช์สำหรับด้านบน
คำสั่ง | หนังบู๊ |
---|---|
-o | จัดเรียงตามคอลัมน์ (สามารถนำหน้าด้วย - หรือ + เพื่อเรียงลำดับจากน้อยไปมากหรือมากไปหาน้อย) |
-ยู | แสดงเฉพาะกระบวนการจากผู้ใช้ที่ระบุ |
-d | อัปเดตเวลาล่าช้าด้านบน |
-O | ส่งคืนรายการคอลัมน์ที่ด้านบนสามารถใช้การเรียงลำดับ |
เรียงลำดับตัวเลือกหน้าจอด้านบนที่นำเสนอโดยใช้Shift + F หน้าจอนี้อนุญาตให้ปรับแต่งการแสดงผลด้านบนและตัวเลือกการจัดเรียง
Fields Management for window 1:Def, whose current sort field is %MEM
Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end!
* PID = Process Id TGID = Thread Group Id
* USER = Effective User Name ENVIRON = Environment vars
* PR = Priority vMj = Major Faults delta
* NI = Nice Value vMn = Minor Faults delta
* VIRT = Virtual Image (KiB) USED = Res+Swap Size (KiB)
* RES = Resident Size (KiB) nsIPC = IPC namespace Inode
* SHR = Shared Memory (KiB) nsMNT = MNT namespace Inode
* S = Process Status nsNET = NET namespace Inode
* %CPU = CPU Usage nsPID = PID namespace Inode
* %MEM = Memory Usage (RES) nsUSER = USER namespace Inode
* TIME+ = CPU Time, hundredths nsUTS = UTS namespace Inode
* COMMAND = Command Name/Line
PPID = Parent Process pid
UID = Effective User Id
ด้านบนแสดงกระบวนการสำหรับผู้ใช้rdcและจัดเรียงตามการใช้งานหน่วยความจำ -
PID USER %MEM PR NI VIRT RES SHR S %CPU TIME+ COMMAND
6130 rdc 6.2 20 0 1349592 117160 33232 S 0.0 1:09.34 gnome-shell
6449 rdc 3.4 20 0 1375872 64428 21400 S 0.0 0:00.43 evolution-calen
6296 rdc 1.7 20 0 1081944 32140 22596 S 0.0 0:00.40 evolution-alarm
6350 rdc 1.6 20 0 560728 29844 4256 S 0.0 0:10.16 prlsga
6281 rdc 1.5 20 0 1027176 28808 17680 S 0.0 0:00.78 nautilus
6158 rdc 1.5 20 0 1026956 28004 19072 S 0.0 0:00.20 gnome-shell-cal
แสดงช่องบนสุดที่ถูกต้อง (ย่อ) -
[centos@CentOS ~]$ top -O
PID
PPID
UID
USER
RUID
RUSER
SUID
SUSER
GID
GROUP
PGRP
TTY
TPGID
ฆ่าคำสั่ง
killคำสั่งใช้เพื่อฆ่ากระบวนการจากเชลล์คำสั่งผ่าน PID เมื่อฆ่ากระบวนการเราจำเป็นต้องระบุสัญญาณที่จะส่ง สัญญาณช่วยให้เคอร์เนลรู้ว่าเราต้องการยุติกระบวนการอย่างไร สัญญาณที่ใช้บ่อยที่สุดคือ -
SIGTERMเป็นนัยว่าเคอร์เนลช่วยให้กระบวนการรู้ว่าควรหยุดลงทันทีที่ทำได้อย่างปลอดภัย SIGTERMเปิดโอกาสให้กระบวนการออกอย่างสง่างามและดำเนินการออกอย่างปลอดภัย
SIGHUPภูตส่วนใหญ่จะรีสตาร์ทเมื่อส่งSIGHUP ซึ่งมักจะใช้กับกระบวนการเมื่อมีการเปลี่ยนแปลงไฟล์คอนฟิกูเรชัน
SIGKILLเนื่องจากSIGTERMเทียบเท่ากับการขอให้กระบวนการปิดระบบ เคอร์เนลต้องการตัวเลือกเพื่อยุติกระบวนการที่จะไม่เป็นไปตามคำขอ เมื่อกระบวนการหยุดทำงานตัวเลือกSIGKILLจะถูกใช้เพื่อปิดกระบวนการอย่างชัดเจน
สำหรับรายการปิดสัญญาณทั้งหมดที่สามารถส่งด้วยตัวเลือกkill the -lสามารถใช้ได้ -
[root@CentOS]# 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@CentOS rdc]#
ใช้SIGHUPเพื่อรีสตาร์ทระบบ
[root@CentOS]# pgrep systemd
1
464
500
643
15071
[root@CentOS]# kill -HUP 1
[root@CentOS]# pgrep systemd
1
464
500
643
15196
15197
15198
[root@CentOS]#
pkillจะอนุญาตให้ผู้ดูแลระบบส่งสัญญาณฆ่าตามชื่อกระบวนการ
[root@CentOS]# pgrep ping
19450
[root@CentOS]# pkill -9 ping
[root@CentOS]# pgrep ping
[root@CentOS]#
killallจะฆ่ากระบวนการทั้งหมด ระวังการใช้killallเป็นรูทเพราะมันจะฆ่ากระบวนการทั้งหมดสำหรับผู้ใช้ทั้งหมด
[root@CentOS]# killall chrome
คำสั่งฟรี
freeเป็นคำสั่งง่ายๆที่มักใช้เพื่อตรวจสอบหน่วยความจำของระบบอย่างรวดเร็ว จะแสดงจำนวนหน่วยความจำฟิสิคัลและสลับที่ใช้ทั้งหมด
[root@CentOS]# free
total used free shared buff/cache available
Mem: 1879668 526284 699796 10304 653588 1141412
Swap: 3145724 0 3145724
[root@CentOS]#
คำสั่งที่ดี
niceจะอนุญาตให้ผู้ดูแลระบบสามารถกำหนดลำดับความสำคัญของการจัดกำหนดการของกระบวนการในแง่ของการใช้งาน CPU ความสวยงามนั้นเป็นพื้นฐานที่เคอร์เนลจะกำหนดเวลาส่วนแบ่งเวลาของ CPU สำหรับกระบวนการหรืองาน โดยค่าเริ่มต้นจะถือว่ากระบวนการได้รับการเข้าถึงทรัพยากร CPU อย่างเท่าเทียมกัน
ก่อนอื่นให้ใช้ด้านบนเพื่อตรวจสอบความสวยงามของกระบวนการที่กำลังทำงานอยู่
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28 root 39 19 0 0 0 S 0.0 0.0 0:00.17 khugepaged
690 root 39 19 16808 1396 1164 S 0.0 0.1 0:00.01 alsactl]
9598 rdc 39 19 980596 21904 10284 S 0.0 1.2 0:00.27 tracker-extract
9599 rdc 39 19 469876 9608 6980 S 0.0 0.5 0:00.04 tracker-miner-a
9609 rdc 39 19 636528 13172 8044 S 0.0 0.7 0:00.12 tracker-miner-f
9611 rdc 39 19 469620 8984 6496 S 0.0 0.5 0:00.02 tracker-miner-u
27 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
637 rtkit 21 1 164648 1276 1068 S 0.0 0.1 0:00.11 rtkit-daemon
1 root 20 0 128096 6712 3964 S 0.3 0.4 0:03.57 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.50 ksoftirqd/0
7 root 20 0 0 0 0 S 0.0 0.0 0:00.00 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:02.07 rcu_sched
เราต้องการที่จะมุ่งเน้นไปที่NICEคอลัมน์บรรยายโดยNI ช่วงความสวยงามสามารถอยู่ระหว่าง -20 ถึงบวก 19. -20 หมายถึงลำดับความสำคัญสูงสุดที่กำหนด
nohup nice --20 ping www.google.com &
Renice
Reniceช่วยให้เราสามารถเปลี่ยนลำดับความสำคัญปัจจุบันของกระบวนการที่กำลังทำงานอยู่
renice 17 -p 30727
คำสั่งดังกล่าวจะลดลำดับความสำคัญของคำสั่งกระบวนการpingของเรา