1. Trang chủ
  2. » Công Nghệ Thông Tin

Chương 6: Quản lý tiến trình Linux

36 872 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Linux Process Management
Trường học University of Information Technology and Communications
Chuyên ngành Computer Science
Thể loại Lecture Notes
Năm xuất bản 2023
Thành phố Hanoi
Định dạng
Số trang 36
Dung lượng 149 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Cần phân biệt tiến trì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.. Các lệnh liên quan đến process kill - Kill một tiến trình số PID  killall - Gửi tín hiệu

Trang 1

Linux Process Management

Trang 2

Giới thiệu

 Tiến trình (process) là một chương trình đơn chạy trên không gian địa chỉ ảo của nó Cần phân biệt tiến trì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ến trình khác nhau.

 Kiểm soát tiến trình là khả năng giao tiếp liên tiến trình được xử lý bởi Kernel

Trang 3

Các loại tiến trình chính

 Tiến trình với đối thoại (Interactive processes) : là tiến trình khởi động và quản lý bởi shell, kể cả tiến trình foreground hoặc background

 Tiến trình batch (Batch processes) : Tiến trì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ến trình ẩn trên bộ nhớ - Daemon processes

Trang 4

Daemon processes

 Là các tiến trì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ương trì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ương trình được gọi là các chương trì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

Trang 5

Kiểm tra tiến trình

 Cách đơn giản nhất để kiểm tra hệ thống tiến trì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

Trang 6

Các lệnh liên quan đến process

 kill - Kill một tiến trình số PID

 killall - Gửi tín hiệu đến một tiến trình bằng tên

 nice - Thiết lập độ ưu tiên của 1 tiến trình mới

 pstree - Hiển thị cây các tiến trình đang chạy

 renice – thay đổi thứ tự ưu tiên của tiến trình đang chạy

 skill – Thông báo trạng thái của tiến trình

 snice - Thông báo trạng thái của tiến trình

 top - Hiển thị tải của hệ thống

Trang 7

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ến trì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ến trình của hệ thống Linux

 Lệnh ps –ax cho phép hiển thị tất cả các tiến trình

 Ta có thể xem các tiến trình đang chạy cùng với dòng lệnh đầy đủ để khởi động tiến trình này bằng lệnh ps –axl

Trang 8

Dừng một tiến trình- kill

 Trong nhiều trường hợp, một tiến trình có thể

bị treo, một chương trì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ến trì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ến trình của mình

Trang 9

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ến trình có thể sinh ra các tiến trình con trong quá trình hoạt động của mình Nếu

dừng tiến trình cha, các tiến trì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ến trình con có dừng đúng hay không

Trang 10

Dừng nhiều tiến trình - killall

 Lệnh killall dùng để dừng nhiều tiến trình bằng tên của tiến trì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ến trình vi đang chạy trong hệ thống

Trang 11

C ác tín hiệu - Signal

 SIGHUP 1 Hangup (POSIX)

 SIGINT 2 Terminal interrupt (ANSI)

 SIGQUIT 3 Terminal quit (POSIX)

 SIGILL 4 Illegal instruction (ANSI)

 SIGTRAP 5 Trace trap (POSIX)

 SIGIOT 6 IOT Trap (4.2 BSD)

 SIGBUS 7 BUS error (4.2 BSD)

 SIGFPE 8 Floating point exception (ANSI)

Trang 12

Signals ( tiếp theo)

 SIGKILL 9 Kill(can't be caught or ignored) (POSIX)

 SIGUSR1 10 User defined signal 1 (POSIX)

 SIGSEGV 11 Invalid memory segment access

(ANSI)

 SIGUSR2 12 User defined signal 2 (POSIX)

 SIGPIPE 13 Write on a pipe with no reader,

Broken pipe (POSIX)

 SIGALRM 14 Alarm clock (POSIX)

 SIGTERM 15 Termination (ANSI)

 SIGSTKFLT 16 Stack fault

Trang 13

Signals ( tiếp theo)

 SIGCHLD 17 Child process has stopped or exited,

changed (POSIX)

 SIGCONT 18 Continue executing, if stopped (POSIX)

 SIGSTOP 19 Stop executing(can't be caught or

ignored) (POSIX)

 SIGTSTP 20 Terminal stop signal (POSIX)

 SIGTTIN 21 Background process trying to read, from TTY (POSIX)

 SIGTTOU 22 Background process trying to write, to TTY (POSIX)

 SIGURG 23 Urgent condition on socket (BSD)

Trang 14

Signals ( tiếp theo)

 SIGXCPU 24 CPU limit exceeded (4.2 BSD)

 SIGXFSZ 25 File size limit exceeded (4.2

BSD)

 SIGVTALRM 26 Virtual alarm clock (4.2 BSD)

 SIGPROF 27 Profiling alarm clock (4.2 BSD)

 SIGWINCH 28 Window size change (4.3

BSD, Sun)

 SIGIO 29 I/O now possible (4.2 BSD)

 SIGPWR 30 Power failure restart (System V)

Trang 15

nice

 Thiết lập độ ưu tiên của 1 tiến trình mới

 nice [OPTION] [COMMAND [ARG] ]

 COMMAND

 -n, adjustment=ADJUST increment priority by

ADJUST first

 help display this help and exit

 version: output version information and exit

 Ví dụ:

 [root@alibaba root]# nice -19 /home/natuan/server2

 ADJUST mặc định là 10 Khoảng thay đổi từ -20 (trật tự cao nhất) đến 19 (thấp nhất).

Trang 16

pstree

 Hiển thị cây các tiến trình đang chạy.

Trang 18

skill

 Thông báo trạng thái của tiến trình

 skill [signal to send] [options] process

selection criteria

 Ví dụ: skill -KILL -v pts/*

 skill –l : liệt kê các tín hiệu kill

 Các tín hiệu thường dùng là HUP, INT, KILL, STOP, CONT

 Các tín hiệu có thể dùng tương đương nhau theo 3 cách -SIGKILL -KILL -9 ( 3 tín hiệu này đều là 1)

Trang 19

snice

 - Thông báo trạng thái của tiến trình

 Tương tự như skill

Trang 20

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ến trình

11:09am up 46 days, 17:44, 2 users, load average: 0.08, 0.03, 0.01

63 processes: 61 sleeping, 2 running, 0 zombie, 0 stopped

CPU states: 0.1% user, 0.0% system, 0.0% nice, 99.8% idle

Mem: 126644K av, 121568K used, 5076K free, 0K shrd, 25404K buff Swap: 136544K av, 9836K used, 126708K free 36040K cached

PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND

27568 tuanna 11 0 1052 1052 836 R 0.1 0.8 0:00 top

1 root 0 0 124 72 68 S 0.0 0.0 0:25 init

2 root 8 0 0 0 0 SW 0.0 0.0 0:00 kevent

Trang 21

Lệnh top

 Số % máy rảnh (idle) in đậm trên là rất quan trọng Một máy rảnh dưới 50% là một máy quá tải và cần được xem xét Lệnh top còn cho phép theo dõi xem có tiến trì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ủ

Trang 22

Background & foregound

 Ta có thể đưa tiến trì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

Trang 23

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ến trình có dấu + là đang ở top

 Tiến trình có dấu - là đang ở bottom

Trang 24

Định thời (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 Tr ong 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ến trình C ó 3 cách sau:

 normal – d ùng cho các chương trình bình thường

 FIFO - Tr ật tự định thì real time FIFO c ó nghĩa là tiến trình nào vào trước (first in) sẽ được làm xong trước (first out)

 RR – Đây là phương pháp xoay vòng ( round robin), m ỗi tác vụ được phục vụ trong 1 khoảng thời gian sau đó CPU chuyển sang phục vụ tiến trì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

Trang 25

Tính chất của ti ến trình

 policy - normal hay real time Real time

processes có thứ tự ưu tiên cao hơn normal

processes

 priority - T hứ tự ưu tiên của tiến trì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 T hứ tự ưu tiên của tiến trình c ó thể được set với lệnh nice v à thay đổi bởi renice

Trang 26

Trạng thái của tiến trình

 running: tiến trình đang chiếm quyền xử lý CPU, đang tính toán

 waiting: tiến trình đang chờ CPU phục vụ ( CPU chuyển sang phục vụ các tiến trình khác)

 susspend: OS tạm từng tiến trì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

Trang 27

Inter-Process Communication

 Signals - G ửi bởi 1 các tiến trì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

trình vào thành input của tiến trình khác

chế thiết lập để cho phép 1 hay nhiều

được đọc bởi 1 hay nhiều tiến trình khác

Trang 28

Inter-Process Communication

 Semaphores - Counters được dùng để kiểm soát việc truy cập vào các tài nguyên chia sẻ Các counter này được dùng như là 1 cơ chế khoá để ngăn ngừa

không nhiều hơn 1 process truy cập vào tài nguyên trong 1 lần

 Bộ nhớ dùng chung – Ánh xạ của vùng bộ nhớ được chia sẻ cho nhiều tiến trì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

Trang 29

Tạo tiến trình

 Dùng system()

 Dùng fork()

 Dùng exec()

Trang 32

Dùng fork()

 Thay thế tiến trình

đôi khi rất bất lợi

Khi gọi exec() ta

Trả về trị 0

Trang 33

sleep(1);

} break;

default:

message = "This is the parent"; n=0;

for(; n < 3; n++) { printf (“%s”, message);

sleep(1);

} break;

} exit(0);

}

Trang 34

Chạy thử fork_demo.c

 Compile fork_demo.c: gcc –o fork_demo fork_demo.c

 [root@alibaba 10]# /fork_demo ; ps -ef

 fork program starting

 This is the child

 This is the child

 This is the child

 root 16585 16440 0 08:44 pts/0 00:00:00 /fork_demo

 This is the child

 [7] Done /fork_demo

Trang 35

Ki ểm soát và đợi tiến trình con

 Khi gọi fork() chương trình sẽ sinh ra tiến trình con và

2 tiến trình này hoạt động độc lập

 Đôi lúc tiến trình cha cần tiến trình con kết thúc rồi

mới chạy tiếp

 trong ví dụ trên, khi tiến trình cha đã kết thúc mà tiến trì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 trạng này ta sử dụng hàm wait()

 #include <sys/types.h>

 #include <sys/wait.h>

 pid_t wait(int &stat_loc);

Trang 36

} exit(0);

} return 0;

}

Ngày đăng: 08/05/2014, 13:49

TỪ KHÓA LIÊN QUAN