Trong chương này, ta sẽ thảo luận chi tiết về quản lý quy trình trong Unix. Khi bạn thực thi một chương trình trên hệ thống Unix của mình, hệ thống sẽ tạo ra một môi trường đặc biệt cho chương trình đó. Môi trường này chứa mọi thứ cần thiết để hệ thống chạy chương trình như thể không có chương trình nào khác đang chạy trên hệ thống.
Bất cứ khi nào bạn đưa ra một lệnh trong Unix, nó sẽ tạo hoặc bắt đầu một quá trình mới. Khi bạn thử lệnh ls để liệt kê nội dung thư mục, bạn đã bắt đầu một quá trình. Nói một cách đơn giản, một tiến trình là một ví dụ của một chương trình đang chạy.
Hệ điều hành theo dõi các quy trình thông qua một số ID gồm năm chữ số được gọi là pid hoặc ID quy trình . Mỗi tiến trình trong hệ thống có một pid duy nhất .
Pid cuối cùng lặp lại vì tất cả các số có thể đã được sử dụng hết và pid tiếp theo sẽ cuộn hoặc bắt đầu lại. Tại bất kỳ thời điểm nào, không có hai tiến trình nào có cùng pid tồn tại trong hệ thống vì nó là pid mà Unix sử dụng để theo dõi từng tiến trình.
Bắt đầu một quy trình
Khi bạn bắt đầu một quy trình (chạy một lệnh), có hai cách để bạn có thể chạy nó:
- Quy trình tiền cảnh
- Quy trình nền
Quy trình tiền cảnh
Theo mặc định, mọi quy trình mà bạn bắt đầu đều chạy ở chế độ nền trước. Nó nhận đầu vào từ bàn phím và gửi đầu ra đến màn hình.
Bạn có thể thấy điều này xảy ra với lệnh ls . Nếu bạn muốn liệt kê tất cả các tệp trong thư mục hiện tại của mình, bạn có thể sử dụng lệnh sau:
$ls ch*.doc
Điều này sẽ hiển thị tất cả các tệp, tên của chúng bắt đầu bằng ch và kết thúc bằng .doc –
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc
Quá trình chạy ở chế độ nền trước, đầu ra được dẫn đến màn hình của tôi và nếu lệnh ls muốn bất kỳ đầu vào nào (mà nó không có), nó sẽ đợi nó từ bàn phím.
Trong khi một chương trình đang chạy ở chế độ nền và tốn nhiều thời gian, không thể chạy lệnh nào khác (bắt đầu bất kỳ quá trình nào khác) vì lời nhắc sẽ không khả dụng cho đến khi chương trình hoàn tất xử lý và xuất hiện.
Quy trình nền
Quá trình nền chạy mà không cần kết nối với bàn phím của bạn. Nếu quá trình nền yêu cầu bất kỳ đầu vào bàn phím nào, quá trình này sẽ đợi.
Lợi thế của việc chạy một tiến trình trong nền là bạn có thể chạy các lệnh khác; bạn không cần phải đợi cho đến khi nó hoàn thành để bắt đầu một cái khác!
Cách đơn giản nhất để bắt đầu quá trình nền là thêm dấu và ( & ) vào cuối lệnh.
$ls ch*.doc &
Điều này hiển thị tất cả các tệp đó tên bắt đầu bằng ch và kết thúc bằng .doc –
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc
Ở đây, nếu lệnh ls muốn bất kỳ đầu vào nào (mà nó không có), nó sẽ chuyển sang trạng thái dừng cho đến khi chúng ta chuyển nó vào nền trước và cung cấp cho nó dữ liệu từ bàn phím.
Dòng đầu tiên chứa thông tin về quy trình nền – số công việc và ID quy trình. Bạn cần biết số công việc để thao tác nó giữa hậu cảnh và tiền cảnh.
Nhấn phím Enter và bạn sẽ thấy như sau:
[1] + Done ls ch*.doc &
$
Dòng đầu tiên cho bạn biết rằng quá trình nền lệnh ls đã kết thúc thành công. Thứ hai là lời nhắc cho một lệnh khác.
Quy trình chạy danh sách
Có thể dễ dàng xem các quy trình của riêng bạn bằng cách chạy lệnh ps (trạng thái quy trình) như sau:
$ps
PID TTY TIME CMD
18358 ttyp3 00:00:00 sh
18361 ttyp3 00:01:31 abiword
18789 ttyp3 00:00:00 ps
Một trong những cờ được sử dụng phổ biến nhất cho ps là tùy chọn -f (f cho đầy đủ), cung cấp thêm thông tin như được hiển thị trong ví dụ sau:
$ps -f
UID PID PPID C STIME TTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
Đây là mô tả của tất cả các trường được hiển thị bằng lệnh ps -f –
Sr.No. | Cột & Mô tả |
1 | UID ID người dùng mà quy trình này thuộc về (người điều hành nó) |
2 | PID Xử lý ID |
3 | PPID ID quy trình chính (ID của quy trình đã bắt đầu nó) |
4 | C Quá trình sử dụng CPU |
5 | DỰ TOÁN Thời gian bắt đầu xử lý |
6 | TTY Loại thiết bị đầu cuối được liên kết với quy trình |
7 | THỜI GIAN Thời gian CPU thực hiện bởi quá trình |
số 8 | CMD Lệnh bắt đầu quá trình này |
Có các tùy chọn khác có thể được sử dụng cùng với lệnh ps –
Sr.No. | Tùy chọn & Mô tả |
1 | -một Hiển thị thông tin về tất cả người dùng |
2 | -x Hiển thị thông tin về các quy trình không có thiết bị đầu cuối |
3 | -u Hiển thị thông tin bổ sung như tùy chọn -f |
4 | -e Hiển thị thông tin mở rộng |
Dừng quá trình
Kết thúc một quá trình có thể được thực hiện theo nhiều cách khác nhau. Thông thường, từ một lệnh dựa trên bảng điều khiển, việc gửi tổ hợp phím CTRL + C (ký tự ngắt mặc định) sẽ thoát khỏi lệnh. Điều này hoạt động khi quá trình đang chạy ở chế độ nền trước.
Nếu một quy trình đang chạy trong nền, bạn sẽ nhận được ID công việc của nó bằng lệnh ps . Sau đó, bạn có thể sử dụng lệnh kill để kết thúc quá trình như sau:
$ps -f
UID PID PPID C STIME TTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated
Tại đây, lệnh kill kết thúc quá trình first_one . Nếu một quy trình bỏ qua lệnh kill thông thường, bạn có thể sử dụng kill -9 , theo sau là ID quy trình như sau:
$kill -9 6738
Terminated
Quy trình dành cho cha mẹ và con cái
Mỗi quy trình unix có hai số ID được gán cho nó: ID quy trình (pid) và ID quy trình mẹ (ppid). Mỗi quy trình của người dùng trong hệ thống có một quy trình mẹ.
Hầu hết các lệnh mà bạn chạy đều có shell là cha của chúng. Kiểm tra ví dụ ps -f trong đó lệnh này liệt kê cả ID quy trình và ID quy trình mẹ.
Quá trình xác sống và trẻ mồ côi
Thông thường, khi một tiến trình con bị lỗi, tiến trình mẹ được cập nhật thông qua tín hiệu SIGCHLD . Sau đó, cha mẹ có thể làm một số nhiệm vụ khác hoặc khởi động lại tiến trình con mới nếu cần. Tuy nhiên, đôi khi tiến trình cha bị lỗi trước khi con của nó bị lỗi. Trong trường hợp này, “cha của tất cả các quy trình”, quy trình init , trở thành PPID mới (ID quy trình mẹ). Trong một số trường hợp, các quá trình này được gọi là các quá trình mồ côi.
Khi một quy trình bị hủy, danh sách ps vẫn có thể hiển thị quy trình với trạng thái Z. Đây là một quá trình zombie hoặc không còn tồn tại. Quá trình này đã chết và không được sử dụng. Các quy trình này khác với các quy trình mồ côi. Họ đã hoàn thành việc thực thi nhưng vẫn tìm thấy một mục nhập trong bảng quy trình.
Quy trình Daemon
Daemon là các quy trình nền liên quan đến hệ thống thường chạy với quyền của root và các yêu cầu dịch vụ từ các quy trình khác.
Một daemon không có thiết bị đầu cuối điều khiển. Nó không thể mở / dev / tty . Nếu bạn thực hiện một “ps -ef” và nhìn vào trường tty , tất cả các daemon sẽ có một ? cho tty .
Nói một cách chính xác, daemon là một tiến trình chạy ở chế độ nền, thường đợi điều gì đó xảy ra mà nó có khả năng hoạt động. Ví dụ, một daemon máy in đang chờ lệnh in.
Nếu bạn có một chương trình yêu cầu xử lý dài, thì bạn nên đặt nó làm daemon và chạy nó ở chế độ nền.
Lệnh hàng đầu
Lệnh top là một công cụ rất hữu ích để nhanh chóng hiển thị các quy trình được sắp xếp theo các tiêu chí khác nhau.
Nó là một công cụ chẩn đoán tương tác cập nhật thường xuyên và hiển thị thông tin về bộ nhớ vật lý và ảo, mức sử dụng CPU, mức trung bình tải và các quy trình bận rộn của bạn.
Đây là cú pháp đơn giản để chạy lệnh hàng đầu và xem số liệu thống kê về việc sử dụng CPU của các quá trình khác nhau –
$top
ID công việc so với ID quy trình
Các quy trình nền và bị tạm ngưng thường được thao tác thông qua số công việc (ID công việc) . Số này khác với ID quy trình và được sử dụng vì nó ngắn hơn.
Ngoài ra, một công việc có thể bao gồm nhiều quá trình chạy trong một chuỗi hoặc cùng một lúc, song song. Sử dụng ID công việc dễ dàng hơn so với theo dõi các quy trình riêng lẻ.
Unix / Linux – Tiện ích giao tiếp mạng
Trong chương này, chúng ta sẽ thảo luận chi tiết về các tiện ích truyền thông mạng trong Unix. Khi bạn làm việc trong môi trường phân tán, bạn cần giao tiếp với người dùng từ xa và bạn cũng cần truy cập vào các máy Unix từ xa.
Có một số tiện ích Unix giúp người dùng tính toán trong môi trường phân tán, được nối mạng. Chương này liệt kê một vài trong số chúng.
Tiện ích ping
Lệnh ping sẽ gửi một yêu cầu echo đến một máy chủ có sẵn trên mạng. Sử dụng lệnh này, bạn có thể kiểm tra xem máy chủ từ xa của mình có phản hồi tốt hay không.
Lệnh ping hữu ích cho những việc sau:
- Theo dõi và cách ly các sự cố phần cứng và phần mềm.
- Xác định trạng thái của mạng và các máy chủ nước ngoài khác nhau.
- Kiểm tra, đo lường và quản lý mạng.
Cú pháp
Sau đây là cú pháp đơn giản để sử dụng lệnh ftp:
$ping hostname or ip-address
Lệnh trên bắt đầu in phản hồi sau mỗi giây. Để thoát ra khỏi lệnh, bạn có thể kết thúc lệnh bằng cách nhấn các phím CNTRL + C.
Thí dụ
Sau đây là một ví dụ để kiểm tra tính khả dụng của một máy chủ lưu trữ có sẵn trên mạng
$ping google.com
PING google.com (74.125.67.100) 56(84) bytes of data.
64 bytes from 74.125.67.100: icmp_seq = 1 ttl = 54 time = 39.4 ms
64 bytes from 74.125.67.100: icmp_seq = 2 ttl = 54 time = 39.9 ms
64 bytes from 74.125.67.100: icmp_seq = 3 ttl = 54 time = 39.3 ms
64 bytes from 74.125.67.100: icmp_seq = 4 ttl = 54 time = 39.1 ms
64 bytes from 74.125.67.100: icmp_seq = 5 ttl = 54 time = 38.8 ms
--- google.com ping statistics ---
22 packets transmitted, 22 received, 0% packet loss, time 21017ms
rtt min/avg/max/mdev = 38.867/39.334/39.900/0.396 ms
$
Nếu máy chủ không tồn tại, bạn sẽ nhận được kết quả sau:
$ping giiiiiigle.com
ping: unknown host giiiiigle.com
$
Tiện ích ftp
Ở đây, ftp là viết tắt của F ile T ransfer P rotocol . Tiện ích này giúp bạn tải lên và tải xuống tệp của mình từ máy tính này sang máy tính khác.
Tiện ích ftp có bộ lệnh giống Unix của riêng nó. Các lệnh này giúp bạn thực hiện các tác vụ như –
- Kết nối và đăng nhập vào máy chủ từ xa.
- Điều hướng các thư mục.
- Liệt kê nội dung thư mục.
- Đặt và nhận tệp.
- Chuyển tệp dưới dạng ascii , ebcdic hoặc binary .
Cú pháp
Sau đây là cú pháp đơn giản để sử dụng lệnh ftp:
$ftp hostname or ip-address
Lệnh trên sẽ nhắc bạn nhập ID đăng nhập và mật khẩu. Khi bạn đã được xác thực, bạn có thể truy cập vào thư mục chính của tài khoản đăng nhập và bạn sẽ có thể thực hiện các lệnh khác nhau.
Bảng sau liệt kê một số lệnh quan trọng:
Sr.No. | Lệnh & Mô tả |
1 | đặt tên tệp Tải tên tệp từ máy cục bộ lên máy từ xa. |
2 | lấy tên tệp Tải tên tệp từ máy từ xa xuống máy cục bộ. |
3 | danh sách tệp mput Tải nhiều tệp từ máy cục bộ lên máy từ xa. |
4 | danh sách tệp mget Tải xuống nhiều tệp từ máy từ xa vào máy cục bộ. |
5 | nhắc tắt Tắt lời nhắc. Theo mặc định, bạn sẽ nhận được lời nhắc tải lên hoặc tải xuống tệp bằng lệnh mput hoặc mget . |
6 | nhắc vào Bật lời nhắc. |
7 | dir Liệt kê tất cả các tệp có sẵn trong thư mục hiện tại của máy từ xa. |
số 8 | cd dirname Thay đổi thư mục thành tên dirname trên máy tính từ xa. |
9 | dirname lcd Thay đổi thư mục thành dirname trên máy cục bộ. |
10 | từ bỏ Giúp đăng xuất khỏi lần đăng nhập hiện tại. |
Cần lưu ý rằng tất cả các tệp sẽ được tải xuống hoặc tải lên hoặc từ các thư mục hiện tại. Nếu bạn muốn tải lên các tệp của mình trong một thư mục cụ thể, trước tiên bạn cần phải thay đổi thư mục đó, sau đó tải lên các tệp cần thiết.
Thí dụ
Sau đây là ví dụ để hiển thị hoạt động của một số lệnh:
$ftp amrood.com
Connected to amrood.com.
220 amrood.com FTP server (Ver 4.9 Thu Sep 2 20:35:07 CDT 2009)
Name (amrood.com:amrood): amrood
331 Password required for amrood.
Password:
230 User amrood logged in.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 1464
drwxr-sr-x 3 amrood group 1024 Mar 11 20:04 Mail
drwxr-sr-x 2 amrood group 1536 Mar 3 18:07 Misc
drwxr-sr-x 5 amrood group 512 Dec 7 10:59 OldStuff
drwxr-sr-x 2 amrood group 1024 Mar 11 15:24 bin
drwxr-sr-x 5 amrood group 3072 Mar 13 16:10 mpl
-rw-r--r-- 1 amrood group 209671 Mar 15 10:57 myfile.out
drwxr-sr-x 3 amrood group 512 Jan 5 13:32 public
drwxr-sr-x 3 amrood group 512 Feb 10 10:17 pvm3
226 Transfer complete.
ftp> cd mpl
250 CWD command successful.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 7320
-rw-r--r-- 1 amrood group 1630 Aug 8 1994 dboard.f
-rw-r----- 1 amrood group 4340 Jul 17 1994 vttest.c
-rwxr-xr-x 1 amrood group 525574 Feb 15 11:52 wave_shift
-rw-r--r-- 1 amrood group 1648 Aug 5 1994 wide.list
-rwxr-xr-x 1 amrood group 4019 Feb 14 16:26 fix.c
226 Transfer complete.
ftp> get wave_shift
200 PORT command successful.
150 Opening data connection for wave_shift (525574 bytes).
226 Transfer complete.
528454 bytes received in 1.296 seconds (398.1 Kbytes/s)
ftp> quit
221 Goodbye.
$
Tiện ích telnet
Đôi khi chúng ta được yêu cầu kết nối với một máy Unix từ xa và làm việc trên máy đó từ xa. Telnet là một tiện ích cho phép người dùng máy tính tại một trang web thực hiện kết nối, đăng nhập và sau đó tiến hành công việc trên máy tính tại một trang web khác. Sau khi đăng nhập bằng Telnet, bạn có thể thực hiện tất cả các hoạt động trên máy được kết nối từ xa của mình. Sau đây là một ví dụ về phiên Telnet:
C:>telnet amrood.com
Trying...
Connected to amrood.com.
Escape character is '^]'.
login: amrood
amrood's Password:
*****************************************************
* *
* *
* WELCOME TO AMROOD.COM *
* *
* *
*****************************************************
Last unsuccessful login: Fri Mar 3 12:01:09 IST 2009
Last login: Wed Mar 8 18:33:27 IST 2009 on pts/10
{ do your work }
$ logout
Connection closed.
C:>
Tiện ích
Lệnh hiển thị thông tin về người dùng trên một máy chủ nhất định. Máy chủ có thể là địa phương hoặc từ xa.
Ngón tay có thể bị vô hiệu hóa trên các hệ thống khác vì lý do bảo mật.
Sau đây là cú pháp đơn giản để sử dụng lệnh ngón tay: Kiểm tra tất cả người dùng đã đăng nhập trên máy cục bộ
$ finger
Login Name Tty Idle Login Time Office
amrood pts/0 Jun 25 08:03 (62.61.164.115)
Nhận thông tin về một người dùng cụ thể có sẵn trên máy cục bộ -
$ finger amrood
Login: amrood Name: (null)
Directory: /home/amrood Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.
Kiểm tra tất cả người dùng đã đăng nhập trên máy từ xa -
$ finger @avtar.com
Login Name Tty Idle Login Time Office
amrood pts/0 Jun 25 08:03 (62.61.164.115)
Nhận thông tin về một người dùng cụ thể có sẵn trên máy điều khiển từ xa -
$ finger amrood@avtar.com
Login: amrood Name: (null)
Directory: /home/amrood Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.