Hướng dn ging dy
Hc phn 4 - Chng ch qun tr mng Linux Trang 135/271
BÀI 12
Qun Lý Tiến Trình
Tóm tt
Lý thuyết: 5 tiết - Thc hành: 5 tiết.
Mc tiêu Các mc chính Bài tp bt
buc
Bài tp làm
thêm
Gii thiu cơ chế
qun lý và điu phi
tiến trình, thiết lp lch
biu hot động cho
các chương trình
trong h thng.
I. Định nghĩa
II. Xem thông tin tiến trình
III. Tiến trình tin cnh
(foreground process)
IV. Tiến trình hu cnh
(background process)
V. Tm dng và đánh thc tiến
trình.
VI. Hy mt tiến trình
VII. Chương trình lp lch at
VIII. Chương trình lp lch batch
IX. Chương trình lp lch crontab
Bài tp 1.1
(qun lý tiến
trình)
Hướng dn ging dy
Hc phn 4 - Chng ch qun tr mng Linux Trang 136/271
I. Định nghĩa
Bn có th kích hot mt chương trình bng tên ca chương trình y, hoc t các tp tin có cha
lnh shell. Trong khi thc hin, chương trình có th tương tác vi nhiu thành phn khác ca h
thng. Chương trình có th đọc và ghi vào tp tin, qun lý thông tin trong RAM, hoc gi thông tin
đến máy in, modem hay nhng thiết b khác.
Tiến trình là mt chương trình đơn chy trên không gian địa ch o ca nó, mt khía cnh nào
đó, tiến trình hơn chương trình ch là biết s dng tài nguyên ca mt h thng đang chy,
trong khi chương trình ch đơn thun là mt lot các câu lnh. Mt chương trình hay lnh có th
phát sinh ra nhiu tiến trình khác. Kho sát lnh nroff –man ps.1 | grep kill | more s sinh ra
3 tiến trình khác nhau. Có 3 loi tiến trình chính trên Linux:
- Tiến trình tương tác (Interactive processes ) : là tiến trình khi động và qun lý bi shell, k
c tiến trình forceground hoc background.
- Tiến trình thc hin theo lô (Batch processes) : tiến trình không gn lin đến bàn điu khin (
terminal ) và được nm trong hàng đợi để ln lượt thc hin.
- Tiến trình n trên b nh (Daemon processes) : là các tiến trình chy n bên dưới h thng
(background). Các tiến trình này thường được khi to - mt cách t động - sau khi h thng
khi động. Đa s các chương trình server cho các dch v chy theo phương thc này. Đây
là các chương trình sau khi được gi lên b nh, đợi (th động) các yêu cu t các chương
trình khách (client) để tr li sau các cng xác định (cng là khái nim gn lin vi giao thc
TCP/IP BSD socket). Hu hết các dch v trên Internet như Mail, Web, Domain Name
Service … đều được thi hành theo nguyên tc này. Các chương trình loi này được gi là
các chương trình daemon và tên ca nó thường kết thúc bng ký t “d” như named, inerd …
Mt tiến trình khi thc hin nếu sinh ra nhiu tiến trình con được gi là tiến trình cha (Parent
Process). Khi tiến trình cha b dng thì các tiến trình con ca nó cũng b dng theo.
Mi tiến trình mang mt định danh gi là PID (Process IDentification). Process Id là mt con s
ln hơn 0 và là duy nht. H thng da vào các PID này để qun lý các tiến trình. Khi khi động,
Linux s thc hin mt tiến trình sn có trong h thng mang tên Init (Vì là tiến trình đầu tiên
được thc hin nên PID=1). Sau đó tiến trình này mi sinh ra các tiến trình khác; các tiến trình
khác có th sinh ra các tiến trình khác na và c tiếp tc như thế to thành cây phân cp các tiến
trình (xem hình cây tiến trình bên dưới). Như vy, dng tiến trình Init nghĩa là dng toàn b h
thng.
Ví d: Xem tiến trình trong h thng.
$pstree –n -p
init(1)-+-keventd(2)
|-kapm-idled(3)
|-mdrecoveryd(9)
|-syslogd(629)
|-klogd(634)
|-rpc.statd(683)
Hướng dn ging dy
Hc phn 4 - Chng ch qun tr mng Linux Trang 137/271
|-apmd(795)
|-sshd(851)---sshd(1064)---bash(1065)---pstree(1492)
|-xinetd(884)
|-sendmail(924)
|-crond(961)
S trong du ( ) là ch s PID ca tiến trình.
II. Xem thông tin tiến trình
Cách đơn gin nht để kim tra nhng tiến trình đang chy trong h thng là s dng lnh ps
(process status). Lnh ps có nhiu tùy chn và ph thuc mt cách mc định vào người đăng
nhp vào h thng. Cú pháp lnh #ps <option>
Mt s tùy chn ca lnh ps cn tham kho:
Tên lnh và tùy
chn
Mc đích
ps –ux Xem tt c các tiến trình mà user kích hot
ps –T Xem nhng tiến trình được chy ti
terminal hin ti ca user.
ps –aux Xem tt c các tiến trình trong h thng
ps –u username Xem tt c các tiến trình ca user nào đó
(được ch định thông qua tham s
username)
Ví d: Lnh ps kết qu hin th như sau:
PID TTY STAT TIME COMMAND
41 v01 S 0:00 –bash
134 v01 R 0:00 ps
Để hin th tt c các tiến trình, ta có th s dng lnh ps –a. Bt c người dùng nào trong h
thng đều có th thy tt c các tiến trình, nhưng ch có th điu khin được các tiến trình do
mình to ra. Tuy nhiên, đối vi super-user thì có quyn điu khin tt c các tiến trình trong h
thng. Lnh ps –ax cho phép hin th tt c các tiến trình, k c nhng tiến trình không gn vi
thiết b đầu cui (tty). Chúng ta có th coi các tiến trình đang thc hin cùng vi đầy đủ dòng lnh
đã khi to nó bng lnh ps –axl. Lnh man ps cho phép coi các tham s t chn khác ca lnh
ps.
Hướng dn ging dy
Hc phn 4 - Chng ch qun tr mng Linux Trang 138/271
III. Tiến trình tin cnh(foreground process)
Khi thc hin mt chương trình t du nhc shell ($ hoc #), chương trình s thc hin và không
xut hin du nhc cho đến khi thc hin xong chương trình. Do đó, chúng ta không th thc
hin các công vic khác trong khi chương trình này đang thc hin. Chương trình hot động như
vy gi là chương trình tin cnh. Chúng ta th chy 1 chương trình có thi gian thc hin lâu để
kim tra, ví d lit kê tt c các thư mc ca h thng bng lnh find / -name pro –print. Thc
hin lnh Vì kết qu rt ln nên chúng ta có th cho vào tp tin : find / -name pro –print >
results.txt. Khi chương trình chy bn phi ch rt lâu cho đến khi du nhc xut hin tr li.
IV. Tiến trình hu cnh(background process)
Tiến trình hu cnh là tiến trình sinh ra độc lp vi tiến trình cha. Khi chy mt chương trình
chiếm thi gian lâu chúng ta có th cho phép chúng chy ngm định bên dưới và tiếp tc thc
hin các công vic khác. Để tiến trình chy dưới chế độ hu cnh chúng ta thêm du & vào sau
lnh thc hin chương trình
Ví d: $ find / -name pro –print > results.txt &
[1] 2489
Khi chy chương trình h thng s xut hin du $ ngay lp tc, chương trình này thc
đang thc hin vi mã s tiến trình là 2489 và đặt hu cnh [1], chúng ta có th kim tra
chương trình này có hot động không bng lnh: ps –aux | grep find. Đơn gin hơn chúng ta
dùng lnh jobs để xem các tiến trình đang có hu cnh:
$jobs
[1] + Running find / -name pro –print > results.txt &
Dòng trên cho biết có 1 tiến trình đang chy hu cnh. Khi thc hin xong chương trình thì màn
hình xut hin câu thông báo:
[1] Done find / -name pro –print.
Vic s dng các tiến trình chy hu cnh giúp cho chúng đưa vào hot động nhiu tiến trình
đồng thi nó thích hp vi chương trình hot động liên tc như daemon.
V. Tm dng và đánh thc tiến trình
Trong mt s trường hp khi đang chy chương trình nhưng thi gian thc hin quá lâu và mun
đưa nó vào hu cnh. Linux cho phép chúng ta đưa nó tm dng và vào hu cnh bng phím
Ctrl-Z. Khi tiến trình đang chy nhn được tín hiu Ctrl-Z thì nó tm dng và chuyn vào hu
cnh, tr du nhc lnh li cho người dùng. Chúng ta có th xem tiến trình có trong hu cnh:
$ jobs
[1] + Stopped find / -name pro –print > results.txt
Dòng kết qu ca jobs cho thy tiến trình này đã có trong hu cnh nhưng không được
thc hin vì chúng ta đã tm dng trước đó. Để cho tiến trình đang dng ti hu cnh hot động
tr li ta dùng lnh bg. Lnh này yêu cu tham s là s th t ca tiến trình hu cnh. Vi ví d
trên ta cho chương trình hot động bng lnh: $bg 1
Hướng dn ging dy
Hc phn 4 - Chng ch qun tr mng Linux Trang 139/271
find / -name pro –print > results.txt&
$ jobs
[1] + Running find / -name pro –print > results.txt &
Khi đưa vào chy ti hu cnh chúng ta thy dòng lnh thc hin được thêm du & vào cui.
Ngược li khi mun mt tiến trình đang chy hu cnh chuyn sang chy tin cnh chúng ta
dùng lnh: fg <s-tt-tiến-trình>.
$ fg 1
find / -name pro –print > results.txt
VI. Hy mt tiến trình
Trong nhiu trường hp, mt tiến trình có th b treo, chng hn như: Mt bàn phím điu khin
không tr li các lnh t bàn phím, mt chương trình server cn nhn cu hình mi, card mng
cn thay đổi địa ch IP …, khi đó chúng ta phi dng (kill) tiến trình đang có vn đề. Linux có lnh
kill để thc hin công vic này. Trước tiên, bn cn phi biết PID ca tiến trình cn dng thông
qua lnh ps. Sau đó, ta s dng lnh:
#kill –9 PID-ca-tiến-trình
Tham s –9 là tín hiu dng tiến trình không điu kin. Không nên dng các tiến trình mà mình
không biết vì có th làm treo máy hoc nhng dch v khác. Mt tiến trình có th sinh ra các tiến
trình con trong quá trình hot động ca mình. Nếu tiến trình cha b dng, các tiến trình con cũng
s dng theo, nhưng không tc thì. Vì vy, phi đợi mt khong thi gian và sau đó kim tra li
xem tt c các tiến trình con có dng đúng hay không. Trong mt s trường hp hn hu, tiến
trình có li nng không dng được, bin pháp cui cùng là khi động li máy.
Lưu ý: Ch có người dùng root mi có quyn dng tt c các tiến trình, còn nhng người dùng
khác ch được dng các tiến trình do mình to ra.
VII. Chương trình lp lch at
Linux có các lnh cho phép thc hin các tiến trình thi đim định trước thông qua lnh at.
Thi đim thc hin tiến trình được nhp vào thông qua tham s ca lnh at. Cú pháp ca lnh
at như sau:
$ at [time]
<các lnh thc hin>
...
<Ctrl+D>
Sau khi bn kết thúc lnh at, dòng thông báo ging như sau s hin ra màn hình: job 756001.a
at Sat Dec 21 01:23:00 2000. Trong đó s 756001.a là s nhn dng công vic (job number)
cho phép tham chiếu ti lch thc hin đó. Sau khi lp lch, nếu mun hy b, ta có th s dng
lnh.
at –r [job-number]