Lệnh top ps trong linux
Ở phần trước chúng ta đã tìm hiểu về permission và các câu lệnh liên quan, ở phần này, chúng ta sẽ đi tìm hiểu về Processes và cách quản lý process bằng lệnh trong Linux. Ở phần này chúng ta sẽ được tìm hiểu về các lệnh sau: Show
Một process hoạt động thế nào?Khi hệ thống khởi động, kernel sẽ khởi tạo một vài hành vi của riêng nó dưới một process và khởi động một chương trình gọi là 4. 4 theo đó sẽ khởi chạy một loạt các shell script (nằm ở 6) được gọi là init script, sẽ khởi động tất cả các service hệ thống.Rất nhiều service này được implement dưới dạng daemon program, chương trình chạy background mà không can thiệp tới giao diện người dùng. Vì thế kể cả khi chúng ta không đăng nhập thì hệ thống cũng ở trạng thái busy một lúc để khởi chạy. Chương trình có thể khởi chạy một chương trình khác được diễn giải trong cơ chế process gọi là process cha sinh ra process con. Kernel sẽ duy trì thông tin về mỗi một process. Ví dụ: mỗi process được gán cho một giá trị là PID (process ID). PID được gán theo thứ tự tăng dần và 4 luôn có PID là 8. Kernel cũng theo dõi thông tin bộ nhớ gán cho mỗi process, cũng như tính sẵn sàng của process để có thể tiếp tục thực thi.Cũng như file thì process cũng có owner và user ID, … Theo dõi processCâu lệnh phổ biến để theo dõi các process là 9. 9 có rất nhiều tùy chọn, cách dùng cơ bản nhất là:
Chúng ta có thể thấy là mặc định thì 9 sẽ không show quá nhiều thông tin, chỉ show thông tin của terminal session hiện tại.
Với thêm options 4, chúng ta sẽ nhìn thấy tất cả các tiến trình bất kể terminal nào.
Chúng ta có thể thấy cột 5 mới xuất hiện, viết tắt của state để chỉ trạng thái của process tương ứng, chúng ta có các dạng state sau:Trạng tháiÝ nghĩaRRunning. Process đang chạy hoặc sẵn sàng để chạySSleeping. Process đang đợi một event để tiếp tục chạyDProcess đang đợi I/OTStopped. Process đang trong quá trình dừng chạyZZombie process. Đây là các tiến trình con đã bị chấm dứt nhưng chưa được giải phóng bởi process cha 6
Khi chạy 9 với option này sẽ hiển thị process thuộc về mọi user.Theo dõi process với PID TTY STAT TIME COMMAND 2058 ? Ss 0:00 /lib/systemd/systemd --user 2059 ? S 0:00 (sd-pam) 2064 ? SLl 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login 2066 ? Ss 0:00 /sbin/upstart --user 2144 ? S 0:00 upstart-udev-bridge --daemon --user 2154 ? Ss 0:00 dbus-daemon --fork --session --address=unix:abstract= 2166 ? Ss 0:00 /usr/lib/x86_64-linux-gnu/hud/window-stack-bridge 2193 ? Ssl 0:11 /usr/bin/ibus-daemon --daemonize --xim --address unix 2199 ? Sl 0:00 /usr/lib/gvfs/gvfsd ...8 9 sẽ cung cấp một bản snapshot của các tiến trình trong hệ thống tại thời điểm mà chúng ta chạy nó. Trong khi đó 8 cung cấp một chế độ theo dõi 1 hơn:
Sau đây là bảng giải thích ý nghĩa output của lệnh 8: 3 chỉ ra là hệ thống đang không busy2Tasks:Tổng kết số lương process và số lương process theo trạng thái3Cpu(s):Dòng này miêu tả đặc điểm của những tác vụ CPU đang thực thi0,9 us0,9% CPU đang được dùng cho user process1,0 us1,0% CPU đang được dùng cho system process0,0 ni0,0% CPU đang được dùng cho process có độ ưu tiên thấp97,8 id97,8% của CPU đang nhàn rỗi0,0 wa97,8% của CPU đang chờ I/O4Mem:Chỉ ra có bao nhiêu RAM đang được dùng5Swap:Chỉ ra có bao nhiêu Swap space đang được dùngKiểm soát processKhi chúng ta gõ một lệnh và chạy nó, terminal sẽ ở trạng thái không dùng được cho đến chương trình chạy xong, chắc hẳn chúng ta đã quá quen thuộc với việc sử dụng 4 để kết thúc một chương trình đang được thực thi, trong phần này chúng ta sẽ tìm hiểu về các cách để kiểm soát một process như vây.Trong phần này chúng ta sẽ lấy ví dụ với chương trình 5 thực thi một việc đơn giản đó là show ra cửa sổ có hình logo hệ thống. Đặc điểm của chương trình này là nó sẽ chiếm terminal cho đến khi chúng ta tắt cửa sổ logo đó đi.Vậy làm sao để chạy một chương trình mà nó không chiếm terminal của chúng ta, chúng ta có thể thêm 6 vào cuối câu lệnh muốn chạy.Việc làm này gọi là chạy background job.
Sau khi chạy lệnh trên, terminal thông báo cho chúng ta biết là chúng ta đã bắt đầu chạy background job đầu tiên với PID là 7. Chúng ta có thể kiểm tra lại bằng lệnh 9 như trên.Ngoài ra còn một lệnh khác cũng có thể list các background job đó là 9
Để trả một process đang chạy background về foreground thì chúng ta có thể sử dụng lệnh 0 là viết tắt của foreground.
Chúng ta truyền vào lệnh 0 số thứ tự của 9, chương trình sẽ lại chiếm terminal như khi chúng ta chạy nó bình thường.Để stop một process (khác với terminate process sử dụng ctrl-c) ta sử dụng ctrl-z
khi đó, đối với 5 chúng ta không thể resize cửa sổ chương trình được. Để tiếp tục thực thi chương trình, chúng ta có thể sử dụng lệnh 0 như trên với tham số là số hiệu của jobs. Hoặc chúng ta cũng có thể sử dụng lệnh 5, tiếp tục chạy chương trình ở background
SignalsChúng ta có thể sử dụng lệnh 6 để dừng process. 0Thực ra lệnh 6 không thực sự kill process mà nó gửi đến process một signal. Signals là cách mà OS giao tiếp với chương trình. Việc chúng ta sử dụng ctrl-c và ctrl-z cũng chính là gửi tín hiệu INT và TSTP đến cho chương trình.Để gửi signal đến một chương trình, chúng ta có thể sửa dụng lệnh 6 kết hợp với số/tên của signal. Sau đây là một số signal phổ biến:Số hiệuTênÝ nghĩa2INTGiống với ctrl-c. Thường là terminate chương trình9KILLThực sự là signal này không thực sự gửi đến chương trình mà kernel sẽ ngay lập tức terminate chương trình mà không có một hành động 9 nào15TERMTerminate. Đây là tín hiệu mặc định mà lệnh 6 gửi đến chương trình.18CONTcontinue. Restore trạng thái của process sau khi nhận tín hiệu STOP……… 1Các bạn có thể tham khảo thêm về các signal khác tại đây. Ngoài ra chúng ta có thể chạy lệnh 1 để list ra các signal khả dụng của hệ thống 2Ngoài ra chúng ta có thể gửi kill signal đến nhiều tiến trình chạy cùng một chương trình bằng cách sử dụng 2 3Series này vẫn còn tiếp diễn đấy nhé, và ở bài viết tiếp theo mình sẽ mang đến cho các bạn chủ đề Environment trong Linux và giới thiệu về Vim (Text Editor mạnh mẽ nhất trên terminal) |