Học bằng cách đọc theo thứ tự

Kiểm tra và dừng tiến trình — ps / kill

Học cách liệt kê tiến trình đang chạy bằng ps, kiểm tra PID của chính mình bằng $$, và dừng một tiến trình bạn đẩy vào nền bằng & với kill — thực hành ngay trên terminal trong trình duyệt.

Xem các tiến trình đang chạy — ps

Tiến trình là mỗi chương trình đang chạy riêng lẻ.

ps là lệnh liệt kê các tiến trình đang chạy ngay lúc này.

Mỗi tiến trình được gán một con số duy nhất gọi là PID (process ID), dùng làm dấu mốc khi bạn dừng nó sau này.

Khi danh sách dài, hãy pipe nó vào grep, như ps | grep sleep, để thu hẹp tiến trình theo tên.

Tiến trình là gì — một bản chạy của chương trình
programshprogramsleepprogramvitiến trìnhshtiến trìnhsleeptiến trìnhviPID 101PID 142PID 188
Chạy một chương trình biến nó thành 'tiến trình', và mỗi tiến trình được gán một PID duy nhất. ps liệt kê các tiến trình đang chạy này.
LệnhÝ nghĩa
psLiệt kê các tiến trình đang chạy cùng PID
ps | grep nameThu hẹp tiến trình theo tên
echo $$Hiển thị PID của chính shell hiện tại
cmd &Chạy một lệnh ở nền

Bạn có thể lấy ra PID của chính shell bằng biến đặc biệt $$.

$$ là một biến đặc biệt được shell điền bằng PID của chính nó.

Chạy echo $$ hiển thị con số của shell bạn đang gõ, và bạn sẽ thấy cùng con số đó trong danh sách ps.

Đọc tiến trình hiện tại bằng ps và $$
psliệt kê tiến trìnhđang chạy cùng PIDecho $$hiển thị PID củashell hiện tại
ps liệt kê PID của các tiến trình đang chạy; echo $$ hiển thị PID của shell hiện tại.
ps          # danh sách tiến trình đang chạy (cùng PID)
echo $$     # PID của chính shell này
ps -ef      # danh sách chi tiết hơn (định dạng tùy môi trường)

① Chạy ps để hiển thị danh sách các tiến trình đang chạy hiện tại.

② Chạy echo $$ để hiển thị PID (con số) của chính shell bạn đang gõ.

③ Chạy ps lần nữa và xác nhận bằng mắt rằng con số từ bước ② xuất hiện trong danh sách. (Chạy đúng thì phần giải thích sẽ hiện ra.)

Linux console
0 / 2 đã hoàn thành
Loading Linux Terminal...

Chạy nền và dừng — & và kill

Thêm & vào cuối một lệnh sẽ chạy nó ở nền, cho phép bạn chuyển sang thao tác tiếp theo mà không cần đợi nó kết thúc.

sleep 30 & chạy một tiến trình chỉ chờ, không làm gì trong 30 giây, ở nền, nên nó rất hợp để luyện cách dừng một tiến trình.

Để dừng một tiến trình chạy nền, hãy truyền PID của nó cho kill.

Shell hiển thị PID ngay sau khi bạn khởi động nó bằng &, và bạn cũng có thể kiểm tra nó trong danh sách ps.

Truyền PID cho kill gửi một tín hiệu kết thúc tới tiến trình đó.

Với một tiến trình không dừng bằng kill PID thông thường, hãy gửi tín hiệu buộc thoát bằng kill -9 PID.

LệnhTín hiệu gửi điDùng khi
kill PIDSIGTERM (yêu cầu thoát)Dừng thông thường; cho tiến trình dọn dẹp
kill -9 PIDSIGKILL (buộc thoát)Buộc bỏ một tiến trình không chịu dừng
Từ chạy nền đến dừng
sleep 30 &chạy ở nền;PID được hiển thịpstìm PID của sleeptrong danh sáchkill PIDkết thúc tiến trìnhcó PID đó
Đẩy nó vào nền bằng &, tìm PID bằng ps, và kết thúc tiến trình đó bằng kill.

Đưa cho kill đúng PID

kill gửi một tín hiệu kết thúc tới tiến trình có PID bạn truyền.

Nhập sai con số sẽ dừng một tiến trình khác, nên hãy kiểm tra PID đích trong danh sách ps trước khi chạy.

Về kill trong môi trường này

Trong môi trường trình duyệt này, truyền PID cho kill có thể không dừng tiến trình giống như trên hệ thống thật, và bạn có thể thấy No such process.

Trong khóa học này bạn học dạng của lệnh kill PID / kill -9 PID.

Trên một server thật, quy trình kiểm tra PID bằng ps và dừng nó bằng kill hoạt động đúng như được trình bày.

sleep 60 &     # chạy một tiến trình chờ 60 giây ở nền
ps             # tìm PID của sleep trong danh sách
kill 123       # truyền PID bạn tìm được (vd 123) để kết thúc nó

① Chạy sleep 30 & để khởi động một tiến trình chỉ chờ 30 giây ở nền.

② Chạy ps | grep sleep để thu hẹp danh sách còn đúng dòng sleep và tìm PID (con số) của nó.

③ Truyền con số bạn tìm được ở bước ② cho kill để kết thúc tiến trình sleep đó.

Linux console
0 / 3 đã hoàn thành
Loading Linux Terminal...
QUIZ

Kiểm tra kiến thức

Hãy trả lời từng câu hỏi một.

Câu 1ps hiển thị gì khi bạn chạy nó?

Câu 2echo $$ hiển thị gì?

Câu 3Điều gì xảy ra khi bạn thêm & vào cuối một lệnh?