Các lệnh trên Shell (End)

Linux là một hệ điều hành đa người dùng và đa nhiệm (thực hiện nhiều tác vụ cùng lúc). Bài này chúng ta sẽ tìm hiểu tính chất đa nhiệm của Linux và cách nó vận hành với giao diện dòng lệnh.

Giống các hệ điều hành đa nhiệm khác, Linux thực hiện nhiều công việc cùng lúc. Thực tế một vi xử lý đơn của máy tính chỉ xử lý được một việc tại một thời điểm, nhưng nhân Linux đã quản lý phân chia các tiến trình luân phiên nhau tại mỗi lần chúng chạy tại những thời điểm giống nhau. Các lệnh thao tác với các tiến trình trên Linux:

  • ps: Liệt kê danh sách các tiến trình đang chạy trên hệ thống.
  • kill: Gửi một tín hiệu tới một hay nhiều tiến trình (thường dùng để đóng tiến trình).
  • jobs: Một cách thay thế việc liệt kê danh sách các tiến trình mà bạn đang sở hữu.
  • bg: Đẩy một tiến trình vào trong background.
  • fg: Đẩy một tiến trình vào trong forground.

Một số ví dụ thực tế:

Linux cung cấp lệnh xload đối với các hệ thống hỗ trợ giao diện X Windows  dùng hiển thị một đồ thị biểu diễn qúa trình hệ thống chạy. Ví dụ:

leaf@leaf-X455LA:~$ xload

Lưu ý: Nếu bạn đóng cửa sổ xload thì chương trình xload kết thúc.

Đặt một chương trình vào background

Giờ ta sẽ khởi động lại xload lần nữa, nhưng để nó trong chế độ nền (background) và cửa sổ nhắc nhở sẽ xuất hiện lại bằng cách dùng thêm ký tự “&” sau xload:

leaf@leaf-X455LA:~$ xload &
[1] 9538

nhắc nhở (prompt) trở lại bởi vì tiến trình được đặt vào background.

Gỉa sử quên đi ký tự “&” sau xload, để đưa chương trình vào background, bạn có thể gõ Ctrl-Z để tiến trình bị đình chỉ. Nó vẫn tồn tại, nhưng không hoạt động, ví dụ:

leaf@leaf-X455LA:~$ xload
^Z
[1]+  Stopped                 xload
leaf@leaf-X455LA:~$

Để khôi phục tiến trình trong background, bạn dùng lệnh bg, ví dụ:

leaf@leaf-X455LA:~$ bg
[1]+ xload &
leaf@leaf-X455LA:~$

Liệt kê danh sách các tiến trình của bạn

Để liệt kê các tiến trình đang chạy trên hệ thống, bạn dùng jobs hoặc hơn nữa là ps:

leaf@leaf-X455LA:~$ jobs
[1]+  Running                 xload &
leaf@leaf-X455LA:~$ ps
  PID TTY          TIME CMD
 2424 pts/12   00:00:00 bash
 2567 pts/12   00:00:00 xload
 2574 pts/12   00:00:00 ps
leaf@leaf-X455LA:~$

Kill một tiến trình

Gỉa sử chương trình bị not responding, làm cách nào để kết thúc nó? Lúc này có thể dùng lệnh kill, để dùng kill bạn cần PID của tiến trình, PID là process identity nôm na là mã định danh của tiến trình mà nhân cấp cho chương trình khi nó chạy trên hệ thống.  Để lấy PID bạn dùng lệnh jobs hoặc ps, ví dụ để kill tiến trình xload ở trên:

leaf@leaf-X455LA:~$ xload &
[1] 2603
leaf@leaf-X455LA:~$ jobs
[1]+  Running                 xload &
leaf@leaf-X455LA:~$ kill %1
leaf@leaf-X455LA:~$ xload &
[2] 2605
[1]   Terminated              xload
leaf@leaf-X455LA:~$ ps
  PID TTY          TIME CMD
 2424 pts/12   00:00:00 bash
 2605 pts/12   00:00:00 xload
 2606 pts/12   00:00:00 ps
leaf@leaf-X455LA:~$ kill 2605
leaf@leaf-X455LA:~$

Nâng cao về kill

Khi lệnh kill thực hiện, thực chất nó gửi một tín hiệu từ nhân tới tiến trình đó. Chương trình lắng nghe tín hiệu từ hệ thống sau đó đáp ứng lại. Ví dụ, bạn đang mở trình duyệt web mà  thực hiện shutdown máy thì nhân sẽ gửi tín hiệu tới trình duyệt yêu cầu nó tắt, lúc này tất cả những gì đang hoạt động sẽ được lưu lại, sau khi trình duyệt tắt thì hệ thống cũng sẽ shutdown. Lệnh kill có thể gửi những tín hiệu khác nhau, để biết các tín hiệu này, bạn dùng:

kill -l

Đây là bảng một số tín hiệu hay dùng:

Tín hiệu

Tên

Mô tả

1 SIGHUP Tín hiệu cúp. Tín hiệu này được gửi tới các tiến trình trên Terminal khi bạn đóng Terminal
2 SIGINT Tín hiệu ngắt. Dùng để tạm ngắt chương trình, trên terminal có thể ngắt thủ công bằng cách dùng Ctrl-C
15 SIGTERM Tín hiệu kết thúc. Tín hiệu được tiến trình nhận để kết thúc. Đây là tín hiệu mặc định khi thực hiện lệnh kill
9 SIGKILL Tín hiệu kill. Đây là tín hiệu yêu cầu kết thúc ngay lập tức tiến trình của nhân Linux. Chương trình không thể lắng nghe tín hiệu này

Ví dụ, gỉa sử trên hệ thống có một chương trình không hồi đáp.

leaf@leaf-X455LA:~$ ps x | grep bad_program
 2681 pts/12   S+     0:00 grep –color=auto bad_program
[2]+  Terminated              xload
leaf@leaf-X455LA:~$

dùng ps để lấy PID của bad_program, sau đó kill nó bằng lệnh kill:

leaf@leaf-X455LA:~$ kill -SIGTERM 2681

leaf@leaf-X455LA:~$ kill -SIGKILL 2681

cũng có thể kill tiến trình dựa trên PID:

leaf@leaf-X455LA:~$ kill 2681

hoặc dùng tham số là các gía trị của tín hiệu:

leaf@leaf-X455LA:~$ kill -9 2681

Phần các lệnh trên Shell mình kết thúc ở đây, các bài sau mình sẽ hướng dẫn các bạn về Shell script.

 

 

Advertisements

Author: phuoctv

My name is Phuoc. I'm interested in computer programming and sharing the knowledge. My email: phuoctv14@gmail.com

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s