Trong hệ thống Linux/Windows, mổi chương trình/shell khi hoạt động sẽ tạo ra một/nhiều tiến trình (processes) với các luồng (Thread) khác nhau, những tiến trình này có nhiều trạng thái như: đang được sử lý, tạm dừng, bị hủy.. tùy thuộc vào tính hoạt động của tiến trình mà Linux & CPU xử lý theo nhiều trạng thái khác nhau.
Linux cung cấp một số công cụ hỗ trợ người dùng điều khiển những tiến trình này, chỉ người sử dụng (User) khởi động tiến trình mới có thể dừng, khởi động hoặc hủy tiến trình, trừ khi có sự can thiệp của người/nhóm có quyền cao nhất là root.
Các tiến trình trong hệ thống được tổ chức có trật tự theo một cấu trúc nhất định (tùy thuộc vào nền hệ điều hành mà cấu trúc này được tổ chức khác nhau). Với tiến trình số 1 với giá trị init, init là tiến trình đầu tiên mà Linux khởi động khi boot vào hệ thống, tất cả tiến trình dùng chung tài nguyên mà ở đây là CPU theo các thuật toán đa luồng (các dòng hệ điều hành hiện đại như LINUX, MAC, WINDOWNS đều hỗ trợ đa luồng).
1. pstree command:
Lệnh pstree cho kết quả mối liên hệ giữa các tiến trình “cha” và “con” (tạm gọi như vậy vì một tiến trình khi khởi động có thể sinh ra nhiều tiến trình “con”, và từ những tiến trình “con” này có thể sinh ra nhiều tiến trình “cháu”).
thesun@thesun:~$ pstree
init─┬─NetworkManager─┬─dhclient
│ └─{NetworkManager}
├─acpid
├─apache2───5*[apache2]
├─atd
├─avahi-daemon───avahi-daemon
├─bonobo-activati───{bonobo-activati}
├─clamd───{clamd}
├─console-kit-dae───63*[{console-kit-dae}]
├─cron
├─cupsd
├─2*[dbus-daemon]
Câu lệnh pstree cho bạn một cách nhìn tổng quá về các tiến trình đang hoạt động như kết quả trên, để xem chi tiết, gắn thêm tham số -a, sử dụng tham số -H + ID, kết quả sẽ tô đậm tiến trình xác định trước với ID, VD: pstree -H 2576 (2576 là ID của tiến trình, mổi tiến trình có ID khác nhau tùy theo thời gian lúc tiến trình khởi động, ID này không cố định, mà thay đổi, ví dụ ở đây: 2576 là ID của apache đang hoạt động trong hệ thống của tôi), dùng tham số -p để liệt kê cây tiến trình với ID , tham số -u xem tiến trình thuộc quyền sở hữu của người sử dụng nào, có thể đóng gói các tham số này vào câu lệnh ngắn gọn:
pstree -apu
2. ps command:
Lệnh ps liệt kê danh sách các tiến trình đang hoạt động trong hệ thống, nếu bạn không thêm vài tham số thì ps sẽ liệt kê các shell hiện hành:
thesun@thesun:~$ ps
PID TTY TIME CMD
3646 pts/0 00:00:00 bash
4795 pts/0 00:00:00 top
5683 pts/0 00:00:00 ps
Sử dụng tham số x để liệt tất cả các tiến trình
thesun@thesun:~$ ps x
PID TTY STAT TIME COMMAND
1930 ? Ssl 0:00 gnome-session
2306 ? Ss 0:02 /usr/lib/scim-1.0/scim-launcher -d -c simple -e all -f socket –no-
2682 ? Ss 0:00 /usr/lib/scim-1.0/scim-helper-manager
2683 ? Ssl 0:07 /usr/lib/scim-1.0/scim-panel-gtk –display :0.0 -c socket -d –no-s
2685 ? Ss 0:03 /usr/lib/scim-1.0/scim-launcher -d -c socket -e socket -f x11
2690 ? Ss 0:00 /usr/bin/ssh-agent /usr/bin/db
PID: ID của tiến trình, đây là số duy nhất dùng cho mổi tiến trình.
TTY: Terminal hay console nào mà tiến trình được khởi động, dấu “?” có nghĩa là tiến trình không khởi động từ Terminal/console.
STAT: Trạng thái tiến trình, S (sleeping – đang ngủ), R (running – đang hoạt động), D (dead – tiến trình không thể khởi động), Z (zombie – tiến tình kết thúc).
TIME: Khoản thời gian CPU dành cho tiến trình – khoản thời gian này có độ tương đối dựa trên các thuật toán định sẵn.
COMMAND: Câu lệnh đầy đủ để khởi động tiến trình.
với tham số u, ps liệt kê các tiến trình riêng của người dùng hiện tại, tuần xuất CPU, phần trăm bộ nhớ …như:
thesun@thesun:~$ ps -ux
Warning: bad ps syntax, perhaps a bogus ‘-’? See http://procps.sf.net/faq.html
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
thesun 1930 0.0 0.3 25524 6584 ? Ssl 08:35 0:00 gnome-session
thesun 2306 0.0 0.0 4808 1524 ? Ss 08:35 0:03 /usr/lib/scim-1.0/scim-launch
thesun 2682 0.0 0.0 4400 804 ? Ss 08:35 0:00 /usr/lib/scim-1.0/scim-helper
thesun 2683 0.1 0.3 106156 8052 ? Ssl 08:35 0:08 /usr/lib/scim-1.0/scim-panel-
thesun 2685 0.0 0.0 6112 1892 ? Ss 08:35 0:04 /usr/lib/scim-1.0/scim-launch
tham số a sẽ liệt kê tất cả tiến tình của tất cả người dùng trong hệ thống.
Trong một số trường hợp khi bạn khởi động một chương trình nào đó từ terminal thì trình này sẽ khóa terminal mà bạn khởi động, vì vậy sẽ không nhập thêm được gì vào terminal này, theo đó bạn có thể khởi động thêm một terminal khác hoặc là ngồi nhâm nhi một tách trà nóng hoặc ly cafe
để đợi chương trình bên trên hoạt động xong, thêm vào kí tự “&” vào sau câu lệnh nếu bạn không muốn terminal bị khóa.
ví dụ: $totem &
Như vậy terminal sẽ thông báo ID của chương trình khởi động và bạn có thể làm việc tiếp với cửa sổ terminal này, dùng jobs để xem các shell trong trong cùng terminal session.
Trong môi trường Linux, các tiến trình được quản lý theo ID, vì vậy để điều khiển các tiến trình này, bạn cần quan tâm & làm việc với ID, tuy nhiên ID là những con số ngẫu nhiên mà Linux cấp cho tiến trình, vì vậy biết tên của tiến trình cũng là cách hay để biết được ID của tiến trình đó, như đề cập bên trên với ps hay pstree command, kết hợp với grep <tên tiến trình>.
ví dụ: $ps -ef | grep totem
bằng cách này bạn có thể lấy được ID của tiến trình mà totem đang hoạt động, và kể từ đây muốn điều khiển totem thì hãy làm việc với ID của nó.
Kill command:
Dùng kill -l để liệt kê cấu trúc của Kill, Bạn có thể thấy một danh sách nhiều lựa chọn:
1) SIGHUP: gửi đến tiến trình yêu cầu restart sau khi kết thúc.
19)SIGSTOP: ngắt tiến trình cho đến khi có yêu cầu SIGCONT
vd: $kill -19 <ID>