Skip to the content.

Quản lý các tiến trình trong Linux.

I.Process

1.Một số thuật ngữ.

2.Quản lý tiến trình cơ bản


- **ps**: Là lệnh thông dụng để xem các tiến trình trên hệ thống.

- **psgrep**: Là lệnh để tìm kiếm tiến trình bằng tên lệnh

root@m4700:~# pgrep -lx bash 15785 bash 15947 bash 15957 bash 15967 bash


- **pstree** Giống lệnh ps nhưng khác là nó hiển thị các process dưới dạng cây và thể hiện rõ quan hệ cha-con.

root@m4700:~# pstree systemd─┬─ModemManager───2[{ModemManager}] ├─NetworkManager─┬─dhclient │ └─2[{NetworkManager}] ├─accounts-daemon───2[{accounts-daemon}] ├─acpid ├─apache2───5[apache2] ├─avahi-daemon───avahi-daemon ├─bluetoothd ├─boltd───2*[{boltd}]


- **ps -u <username>**: là lệnh để xem những process được thực hiện bởi một user nhất định.

- **ps -U <username>**: xem tất cả các process ngoai trừ process của user nào đó.

- **top**: top cũng là một công cụ phổ biến trên Linux. `top` có thể  xem các thông tin của process như cpu đã sử dụng, ram sử dụng, và một số thông tin khác. Bạn có thể quản lý các tiến trình qua top. 

## 3.Signaling process
- **kill**: Lệnh `kill` là lệnh dùng để kill(stop) một tiến trình với PID của nó. Khi thực hiện lệnh kill, nó gửi đến tiến trình một tín hiệu(signal)

- **kill -l**: là lệnh dùng để liệt kê tất cả các tín hiệu có thể được gửi đến một process đang chạy bởi người dùng hay process khác.

root@m4700:~# 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


- **kill -1 (SIGHUP)**: là lệnh gửi tín hiệu SIGHUP đẻ báo với tiến trình nên đọc lại file cấu hình của nó. 

- **kill -15 (SIGTERM)**: lệnh `kill -15` là lệnh gửi tín hiệu SIGTERM đến tiến trình để đóng tiến trình. Nó là mặc định nếu như không có option nào cho lệnh kill. Nhà phát triển của tiến trình đó có thể ngăn chặn việc đóng tiến trình khi nhận tín hiệu SIGTERM.

- **kill -9 (SIGKILL)**: lệnh `kill -9` là lệnh gửi tín hiệu SIGKILL nhưng *không phải là đến tiến trình* mà là đến *Linux kernel*. Linux kernel sẽ đóng đột ngột tiến trình. Nhà phát triển của tiến trình không thể ngăn chặn kill -9.

- **SIGSTOP và SIGCONT**: `kill -19` gửi tín hiệu *SIGSTOP* đến tiến trình và *tạm dừng* nó. Khi nó bị *tạm dừng*, nó không sử dụng CPU nhưng nó được lưu trong RAM và có thể được *hồi sinh* với lệnh `kill -18` (*SIGCONT*)

- **pkill**: là lệnh để kill một tiến trình với tên lệnh của nó.
```bash
root@m4700:~# sleep 1000 &
[1] 19396
root@m4700:~# pkill sleep
[1]+  Terminated              sleep 1000

II.Process Priorities

1.Giá trị priority và nice.

2. nice và renice

Khi một tiến trình đang chạy, chúng ta có thể thay đổi giá trị nice của tiến trình bằng lệnh renice

root@m4700:~# renice +20 6580
6580 (process ID) old priority -20, new priority 19
root@m4700:~# renice +15 6580
6580 (process ID) old priority 19, new priority 15

Với user thường chỉ có thể điều chỉnh giá trị nice từ 0 đến +19 cho tiến trình mà họ sở hữu, với user root là từ -20 đến 19.

Lệnh nice có chức năng gần giống renice nhưng nó được dùng khi chạy câu lệnh.

nice -10 bash

III.Background job.

[1]+ Stopped vi test root@m4700:~# jobs [1]+ Stopped vi test

- **&** : Những tiến trình background được chạy với & ở cuối cũng được hiển thị với `jobs`
```bash
root@m4700:~# tree / > /dev/null &
[2] 8335
root@m4700:~# jobs
[1]+  Stopped                 vi test
[2]-  Running                 tree / > /dev/null &

```