Nội Dung Bài Viết
2. Điều khiển tiến trình (Process)
2.1 Xuất nhập.
Các tiến trình thường nhận dữ liệu đầu vào như bàn phím (stdin) và xử lý sau đó ghi kết quả ra một nơi nào đó như màn hình (stdout) hoặc xuất ra một tiệp tin.
ví dụ:
1 2 3 4 5 | # ls – l testfile - r-x rwx rw- 1 root books 2211 NOV 22:11 testfile # ls -l > data.txt # cat data.txt - r-x rwx rw- 1 root books 2211 NOV 22:11 testfile |
nhưng nếu bạn muốn ghi chồng lên dữ liệu thì bạn phải dùng lệnh >> thì dữ liệu sẽ được ghi tiếp theo sau dữ liệu cũ.
1 2 3 4 | # ls -l >> data.txt # cat data.txt - r-x rwx rw- 1 root books 2211 NOV 22:11 testfile - r-x rwx rw- 1 root books 2211 NOV 22:11 testfile |
2.2 Kiểm soát tiến trình
2.2.1 Thông tin tiến trình
Dùng lệnh ps để xem thông tin về tiến trình
ví dụ:
1 | # ps -a thuộc tính -a là all để liệt kê tất cả các tiến trình PID TTY TIME CMD 2296 pts/11 00:00:00 bash 4214 pts/11 00:00:00 ps |
Chú ý đến thông số PID (Process Identify) là thông số danh định của mỗi tiến trình được hệ điều hành cấp phát.
2.2.2 Tiến trình tiền cảnh (foreground)
Thường khi bạn chạy tiến trình nào đó nhưng sau một khoảng thời gian thì terminal nới trả lại dấu nhắc của hệ thống ($, #). như khi bạn chạy minicom trên terminal vậy đấy.
ví dụ: ta thực hiện lệnh ls -R / > allfiles.txt . / bắt đầu từ thư mục gốc, -R(Recursive) đệ quy .
1 | # ls -R / > allfiles.txt |
thì mất khoảng thời gian khá lâu đến khi kết thúc tiến trình thì dấu nhắc hệ thống mới được hiển thị.
2.2.3 Tiến trình hậu cảnh (background)
Khi chạy một tiến trình nào đó trên terminal nhưng dấu nhắc hệ thống trả lại tức thì hoặc thời gian xử lý ít hơn thì ta gọi tiến trình đó đang hoạt động ở phía hậu cảnh. Để đưa tiến trình hoạt động ở chế độ hậu cảnh ta thêm dấu & cuối dòng lệnh.
ví dụ:
1 | # ls -R / > allfiles.txt & [1] 22311 # |
như vậy tiến trình ls -R đã trở thành tiến trình hậu cảnh với thông số PID = 22311 và tiến trình là tác vụ đầu tiên chạy ở hậu cảnh [1]. ta dùng lệnh ps -a để kiểm tra tiến trình của ta có đang hoạt động hay không?
2.2.4 Tạm dừng tiến trình
Để đưa một tiến trình đang chạy ở tiền cảnh qua hậu cảnh thì ta làm cách nào?
Ta nhấn tổ hợp phím Ctrl – Z để dừng một chương trình và đưa vào hậu cảnh sau đó dấu nhắc hệ thống được trả về. Tuy đã đưa về hậu cảnh nhưng tiến trình đã bị dừng, nó chỉ chạy lại ở hậu cảnh khi ta cho phép.
1 2 3 4 5 | # ls -R / > allfiles.txt ^Z [1]+ Stopped ls -R / > allfiles.txt # ps -af UID PID PPID C STIME TTY TIME CMD user 4276 2296 0 22:23 pts/11 00:00:00 ps -af |
2.2.5 Đánh thức tiến trình
Làm sao để biết tiến trình đang hoạt động hay đã dừng? ta dùng lệnh jobs, lệnh này thể hiện những tiến trình ở hậu cảnh.
1 | # jobs [1]+ Stopped ls -R / > allfiles.txt |
ta thấy tiến trình ta đang dừng lại, để tiến trình tiếp tục thực hiện ở hậu cảnh ta dùng lệnh bg với số thứ tự của tác vụ.
1 2 3 | # bg 1 ls -R / > allfiles.txt # jobs [1]+ Running ls -R / > allfiles.txt & |
để tiến trình hoạt động ở tiền cảnh ta dùng lệnh fg với số thứ tự của tác vụ.
1 2 | # fg 1 ls -R / > allfiles.txt |
Tín hiệu Ctrl-Z là tín hiệu SIGTSTP được gửi đến hàm kill() yêu cầu tạm dừng chương trình
2.2.6 Hủy tiến trình
Trong lúc thực thi không phải tiến trình lúc này cũng hoạt động tốt đẹp mà nhiều lúc sẽ gặp những con bọ đau đầu làm tiến trình chúng ta treo vô tận. Do đó để muốn thoát ra vòng lặp vô tận này ta dùng lệnh kill + mã tính trình (PID) để dùng tiến trình đó lại, thường ta dùng lệnh ps -af để kiểm tra thoong số PID rồi chọn tiến trình chưa PID mình muốn dừng.
ví dụ:
1 2 3 4 5 6 7 8 9 10 | # ls -R / > allfiles.txt ^Z # ps -af UID PID PPID C STIME TTY TIME CMD user 4276 2296 0 22:23 pts/11 00:00:00 ps -af user 22311 2425 0 22:25 pts/11 00:00:00 ps ls -R # kill 22311 # ps -af UID PID PPID C STIME TTY TIME CMD user 4276 2296 0 22:23 pts/11 00:00:00 ps -af |
Trong trường hợp gọi lệnh kill nhưng tiến trình vẫn không bị chấm dứt, ta có thể sử dụng lệnh kill ở cấp độ -9. Tuy nhiên phải đăng nhập ở quyền root.
2.2.7 Giao tiếp giữa các tiến trình
Các chương trình cần phải có nhu cầu chuyền dữ liệu cho nhau để xử lý theo như chức năng của chúng. Để làm được điều đó ta dùng cơ chế pipe “|”.
Ví dụ: Chuyển dữ liệu do ls kết xuất sang cho lệnh more để xủa lý và phân trang.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # ls -R | m .: Desktop Documents Downloads Driver examples. desktop linux_basic makefile Music Pictures poky Public Templates udoo-neo-bsp - - More - - |
ví dụ: sử dung lệnh ps -af và grep để tìm kiếm và so khớp chuỗi trong tập dữ liệu.
1 2 3 4 | $ ps -af | grep 'af' UID PID PPID C STIME TTY TIME CMD user 4367 4353 0 22:51 pts/9 00:00:00 ps -af user 4368 4353 0 22:51 pts/9 00:00:00 grep --color=auto af |
Nếu bạn chưa đọc bất kỳ bài viết: các tập lệnh của Linux, các bạn có thể đọc các bài trước đó tại đây
Bài viết các bạn có thể tham khảo:
- Các tập lệnh của Linux (Phần 3) – Tìm hiểu Linux cơ bản
- Lập trình shell
- Lập trình shell (Tiếp theo 2)