Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 36 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
36
Dung lượng
149 KB
Nội dung
Linux Process Management Giới thiệu Tiếntrình (process) là một chươngtrình đơn chạy trên không gian địa chỉ ảo của nó. Cần phân biệt tiếntrình với lệnh vì một dòng lệnh trên shell có thể sinh ra nhiều tiến trình. Ví dụ: dòng lệnh sau netstat –n | grep 8080 | more sẽ sinh ra 3 tiếntrình khác nhau. Kiểm soát tiếntrình là khả năng giao tiếp liên tiếntrình được xử lý bởi Kernel Các loại tiếntrình chính Tiếntrình với đối thoại (Interactive processes) : là tiếntrình khởi động và quảnlý bởi shell, kể cả tiếntrình foreground hoặc background. Tiếntrình batch (Batch processes) : Tiếntrình không gắn liền đến bàn điều khiển (terminal) và được nằm trong hàng đợi để lần lượt thực hiện. Tiếntrình ẩn trên bộ nhớ - Daemon processes Daemon processes Là các tiếntrình chạy dưới background. Đa số các server cho các dịch vụ chạy theo phương thức này. Đây là các chươngtrình sau khi được gọi lên bộ nhớ, đợi thụ động các yêu cầu từ các client để trả lời sau các port xác định. Hầu hết các dịch vụ Internet như mail, Web, DNS … chạy theo nguyên tắc này. Các chươngtrình được gọi là các chươngtrình daemon và tên của nó thường kết thúc bằng ký tự “d” như named, inetd … Ký tự “d” cuối được phát âm rời ra như “đê “ trong Tiếng Việt. Kiểm tra tiếntrình Cách đơn giản nhất để kiểm tra hệ thống tiếntrình đang chạy là sử dụng lệnh ps (process status). Lệnh ps có nhiều tùy chọn (option) và phụ thuộc một cách mặc định vào người login vào hệ thống. $ ps PID TTY STAT TIME COMMAND 41 v01 S 0:00 -bash 134 v01 R 0:00 ps Các lệnh liên quan đến process kill - Kill một tiếntrình số PID killall - Gửi tín hiệu đến một tiếntrình bằng tên nice - Thiết lập độ ưu tiên của 1 tiếntrình mới pstree - Hiển thị cây các tiếntrình đang chạy. renice – thay đổi thứ tự ưu tiên của tiếntrình đang chạy. skill – Thông báo trạng thái của tiếntrình snice - Thông báo trạng thái của tiếntrình top - Hiển thị tải của hệ thống Lệnh ps Để hiển thị tất cả các process, ta có thể sử dụng lệnh ps –a. Một user thường có thể thấy tất cả các tiến trình, nhưng chỉ có thể điều khiển được các tiếntrình của mình tạo ra. Chỉ có superuser mới có quyền điều khiển tất cả các tiếntrình của hệ thống Linux Lệnh ps –ax cho phép hiển thị tất cả các tiếntrình Ta có thể xem các tiếntrình đang chạy cùng với dòng lệnh đầy đủ để khởi động tiếntrình này bằng lệnh ps –axl. Dừng một tiến trình- kill Trong nhiều trường hợp, một tiếntrình có thể bị treo, một chươngtrình server cần nhận cấu hình mới, card mạng cần thay đổi địa chỉ IP …, khi đó chúng ta phải dừng tiến trình. Linux có lệnh kill để thực hiện các công tác này. Trước tiên bạn cần phải biết PID của tiếntrình cần dừng thông qua lệnh ps. Chỉ có super-user mới có quyền dừng tất cả các tiến trình, còn người sử dụng chỉ được dừng các tiếntrình của mình. Lệnh kill kill -signal PID_của_ tiến_trình Tham số -signal là gửi tín hiệu dừng đến chương trình. Tùy theo mục đích ta có thể gửi tín hiệu dừng khác nhau đến tiến trình. Một tiếntrình có thể sinh ra các tiếntrình con trong quá trình hoạt động của mình. Nếu dừng tiếntrình cha, các tiếntrình con cũng sẽ dừng theo, nhưng không tức thì. Vì vậy phải đợi một khoảng thời gian và sau đó kiểm tra lại xem tất cả các tiếntrình con có dừng đúng hay không. Dừng nhiều tiếntrình - killall Lệnh killall dùng để dừng nhiều tiếntrình bằng tên của tiếntrình đó. Cách dùng : killall –SIGNAL tên_tiến_trình_cần_kill Ví dụ: killall -9 vi ; lệnh này sẽ kill hết tất cả các tiếntrình vi đang chạy trong hệ thống [...]... pts/0 00:00:00 /fork_demo This is the child [7] Done /fork_demo Kiểm soát và đợi tiếntrình con Khi gọi fork() chươngtrình sẽ sinh ra tiếntrình con và 2 tiếntrình này hoạt động độc lập Đôi lúc tiếntrình cha cần tiếntrình con kết thúc rồi mới chạy tiếp trong ví dụ trên, khi tiếntrình cha đã kết thúc mà tiếntrình con vẫn còn chạy (tiếp tục in ra màn hình “This is the child”).Để tránh tình... this line.\n"); exit(0); } Dùng fork() Thay thế tiếntrình đôi khi rất bất lợi Khi gọi exec() ta không còn có thể kiểm soát được tiếntrình hiện hành của mình nữa UNIX -Linux dùng fork() để nhân bản tiếntrình Khởi tạo tiếntrình chính Gọi fork() Trả về PID của Trả về trị 0 tiếntrình con Mã lệnh kế của process ban đầu (Parent) Mã lệnh thực thi tiếntrình mới Child process fork_demo.c #include ... của tiếntrình running: tiếntrình đang chiếm quyền xử lý CPU, đang tính toán waiting: tiếntrình đang chờ CPU phục vụ ( CPU chuyển sang phục vụ các tiếntrình khác) susspend: OS tạm từng tiếntrình sleep() Khi cần thì OS sẽ đánh thức (wake up) hay nạp lại mã lệnh vào memory, cấp phát tài nguyên và CPU để process tiếp tục chạy Inter-Process Communication Signals - Gửi bởi 1 các tiến trình. .. (Process Scheduling) Thời gian máy tính trong Linux được đặt trong các jiffies jiffie là một bộ vi xử lý thời gian Trong hầu hết các hệ Linux là 1/100 giây Một vài hệ thống khác là 1/1024 giây Linux kernel kiểm soát việc định thời tiếntrình Có 3 cách sau: normal – dùng cho các chươngtrình bình thường FIFO - Trật tự định thì real time FIFO có nghĩa là tiếntrình nào vào trước(first in) sẽ được làm... chuyển sang phục vụ tiếntrình khác sau đó quay trở lại task queue để tiếp tục Đây là thứ tự ưu tiên định thời real time Tính chất của tiếntrình policy - normal hay real time Real time processes có thứ tự ưu tiên cao hơn normal processes priority - Thứ tự ưu tiên của tiếntrình Nó là 1 con số giữa between -20 và 19 Giá trị -20 là cao nhất , 19 là thấp nhất Thứ tự ưu tiên của tiếntrình có thể được... các tiếntrình khác hay kernel vào 1 tiến trình cụ thể nào để thay đổi trạng thái hoạt động Pipes – Dùng để dẫn các output của 1 tiến trình vào thành input của tiến trình khác FIFOS - first data in, first data out Message queues – hàng đợi message là cơ chế thiết lập để cho phép 1 hay nhiều processes có thể ghi messages mà có thể được đọc bởi 1 hay nhiều tiến trình khác Inter-Process Communication... tương đương nhau theo 3 cách -SIGKILL -KILL -9 ( 3 tín hiệu này đều là 1) snice - Thông báo trạng thái của tiến trình Tương tự như skill Lệnh top Hiển thị sự hoạt động của các tiến trình, đặc biệt là các thông tin về tài nguyên hệ thống cũng như việc sử dụng tài nguyên đó của từng tiếntrình 11:09am up 46 days, 17:44, 2 users, load average: 0.08, 0.03, 0.01 63 processes: 61 sleeping, 2 running,... có tiếntrình nào chiếm dụng quá nhiều thời gian CPU cũng như truy cập đĩa không Ngoài ra, một số lệnh khác như vmstat mpstat, sar, iostat cũng cho phép xem xét với các mục đích khác nhau hoạt động của máy chủ Background & foregound Ta có thể đưa tiếntrình vào hoạt động ở background của hệ thống bằng lệnh bg hoặc Ctrl-Z hoặc thêm dấu “&” sau dòng lệnh Ví dụ: /vi hello.txt Để gọi tiến trình. .. lệnh fg Trong trường hợp có nhiều tiếntrình đang ở trong background ta dùng lệnh jobs để liệt kê và gọi lên bằng cách dùng fg kèm theo thứ tự của process đó trong jobs queue Ví dụ: fg, bg, jobs [root@alibaba root]# jobs [1]+ Stopped vim abc [2] Stopped vim def [3]- Stopped vim ghi [root@alibaba root]# fg 2 Tiếntrình có dấu + là đang ở top Tiếntrình có dấu - là đang ở bottom Định... Bộ nhớ dùng chung – Ánh xạ của vùng bộ nhớ được chia sẻ cho nhiều tiếntrình Message queues, semaphores, và shared memory có thể được truy cập bởi processes nếu chúng có quyền truy cập vào tài nguyên được thiết lập bởi object's creator Process phải truyền 1 danh hiệu identifier vào kernel để có thể được cho phéo truy cập Tạo tiếntrình Dùng system() Dùng fork() Dùng exec() Dùng system()