OnWorks Linux và Windows Online WorkStations

Logo

Lưu trữ trực tuyến miễn phí cho máy trạm

<Trước | Nội dung | Tiếp theo>

Sản phẩm -u -a các tùy chọn cung cấp thông tin bổ sung. Để biết thêm tùy chọn và những gì họ làm, hãy tham khảo các trang Thông tin.


Trong phần tiếp theo, chúng ta sẽ xem cách một quy trình có thể tạo ra một quy trình khác.


hình ảnh

4.1.5. Sự sống và cái chết của một quá trình


4.1.5.1. Tạo quy trình


Một quy trình mới được tạo bởi vì một quy trình hiện có tạo ra một bản sao chính xác của chính nó. Tiến trình con này có cùng môi trường với quy trình mẹ của nó, chỉ khác số ID quy trình. Thủ tục này được gọi là rèn.


Sau quá trình fork, không gian địa chỉ của tiến trình con được ghi đè bằng dữ liệu tiến trình mới. Điều này được thực hiện thông qua một giám đốc điều hành gọi đến hệ thống.


Sản phẩm fork-và-thực thi Do đó, cơ chế chuyển một lệnh cũ sang lệnh mới, trong khi môi trường mà chương trình mới được thực thi vẫn giữ nguyên, bao gồm cấu hình thiết bị đầu vào và đầu ra, các biến môi trường và mức độ ưu tiên. Cơ chế này được sử dụng để tạo tất cả các quy trình UNIX, vì vậy nó cũng áp dụng cho hệ điều hành Linux. Ngay cả quá trình đầu tiên, trong đó, với ID quy trình 1, được phân nhánh trong quá trình khởi động trong

cái gọi là bootstrapping thủ tục.


Lược đồ này minh họa cơ chế fork-và-thực thi. ID quy trình thay đổi sau quy trình fork:


Hình 4-1. Cơ chế Fork-and-Operating


hình ảnh


Có một số trường hợp trong đó trong đó trở thành cha mẹ của một quy trình, trong khi quy trình này không được bắt đầu bởi trong đó, như chúng ta đã thấy trong ptree thí dụ. Nhiều chương trình, chẳng hạn, quỷ hóa xử lý con của chúng, vì vậy chúng có thể tiếp tục chạy khi cấp độ gốc dừng hoặc đang bị dừng. Một trình quản lý cửa sổ là một ví dụ điển hình; nó bắt đầu một thuật ngữ x quy trình tạo ra một trình bao chấp nhận các lệnh. Người quản lý cửa sổ sau đó từ chối mọi trách nhiệm khác và chuyển quy trình con cho trong đó. Sử dụng cơ chế này, có thể thay đổi trình quản lý cửa sổ mà không làm gián đoạn các ứng dụng đang chạy.


Thỉnh thoảng mọi thứ vẫn diễn ra không như ý muốn, ngay cả trong những gia đình tốt. Trong một trường hợp ngoại lệ, một quá trình có thể kết thúc trong khi cha mẹ không đợi quá trình này hoàn thành. Quá trình không bị chôn vùi như vậy được gọi là zombie quá trình.


hình ảnh

4.1.5.2. Kết thúc quy trình


Khi một quá trình kết thúc bình thường (nó không bị giết hoặc bị gián đoạn bất ngờ), chương trình trả về trạng thái thoát cho cha mẹ. Trạng thái thoát này là một số được chương trình trả về cung cấp kết quả thực hiện chương trình. Hệ thống trả về thông tin khi thực hiện một công việc có nguồn gốc từ ngôn ngữ lập trình C mà UNIX đã được viết.


Sau đó, mã trả về có thể được diễn giải bởi mã mẹ hoặc trong các tập lệnh. Giá trị của các mã trả về là dành riêng cho chương trình. Thông tin này thường có thể được tìm thấy trong các trang chủ của chương trình được chỉ định, ví dụ: grep lệnh trả về -1 nếu không tìm thấy kết quả phù hợp nào, có thể in thông báo trên các dòng "Không tìm thấy tệp". Một ví dụ khác là lệnh nội trang Bash đúng, không có tác dụng gì ngoại trừ trả về trạng thái thoát là 0, nghĩa là thành công.


hình ảnh


4.1.5.3. Tín hiệu


Các quá trình kết thúc vì chúng nhận được tín hiệu. Có nhiều tín hiệu mà bạn có thể gửi đến một quy trình. Sử dụng giết lệnh để gửi tín hiệu đến một tiến trình. Lệnh giết -l hiển thị một danh sách các tín hiệu. Hầu hết các tín hiệu dành cho hệ thống sử dụng nội bộ hoặc cho các lập trình viên khi họ viết mã. Là người dùng, bạn sẽ cần các tín hiệu sau:


Bảng 4-2. Tín hiệu chung


Tên tín hiệu

Số tín hiệu

Ý nghĩa

HẠN MỤC TIÊU

15

Kết thúc quá trình một cách có trật tự.

KÝ HIỆU

2

Làm gián đoạn quá trình. Một quá trình có thể bỏ qua tín hiệu này.

SIGKILL

9

Làm gián đoạn quá trình. Một quá trình không thể bỏ qua tín hiệu này.

ĐĂNG KÍ

1

Đối với daemon: đọc lại tệp cấu hình.

Bạn có thể đọc thêm về các hành động mặc định được thực hiện khi gửi tín hiệu đến một quy trình trong người đàn ông 7 tín hiệu.


hình ảnh

4.1.6. SUID và SGID


Như đã hứa trong chương trước, bây giờ chúng ta sẽ thảo luận chi tiết hơn về các chế độ đặc biệt SUID và SGID. Các chế độ này tồn tại để cung cấp cho người dùng bình thường khả năng thực thi các tác vụ mà họ thường không thể thực hiện do sơ đồ cấp phép tệp chặt chẽ được sử dụng trên các hệ thống dựa trên UNIX. Trong tình huống lý tưởng, các chế độ đặc biệt được sử dụng càng ít càng tốt, vì chúng bao gồm các rủi ro bảo mật. Các nhà phát triển Linux thường cố gắng tránh chúng nhiều nhất có thể. Hệ điều hành Linux ps phiên bản, ví dụ, sử dụng thông tin được lưu trữ trong / proc hệ thống tệp, có thể truy cập được cho tất cả mọi người, do đó tránh tiết lộ dữ liệu hệ thống nhạy cảm và tài nguyên cho công chúng. Trước đó, và vẫn còn trên các hệ thống UNIX cũ hơn, ps chương trình cần quyền truy cập vào các tệp như / dev / mem / dev / kmem, có nhược điểm vì các quyền và quyền sở hữu trên các tệp này:


rita: ~> ls

crw-r -----

-l

/ dev / * mem

Gốc 1


km em


1,


2 tháng 30 22 30:XNUMX / dev / kmem

crw-r -----

Gốc 1

km em

1,

1 tháng 30 22 30:XNUMX / dev / mem

Với các phiên bản cũ hơn của ps, không thể khởi động chương trình với tư cách là người dùng thông thường, trừ khi các chế độ đặc biệt được áp dụng cho nó.


hình ảnh

Mặc dù chúng tôi thường cố gắng tránh áp dụng bất kỳ chế độ đặc biệt nào, nhưng đôi khi cần sử dụng SUID. Một ví dụ là cơ chế thay đổi mật khẩu. Tất nhiên người dùng sẽ muốn tự mình thực hiện việc này thay vì bị quản trị viên hệ thống đặt mật khẩu. Như chúng ta biết, tên người dùng và mật khẩu được liệt kê trong / etc / passwd tệp có các quyền truy cập và chủ sở hữu sau:


mỏ: ~> ls -l / etc / passwd

-rw-r - r-- 1 gốc rễ

1267 16 tháng 14 43:XNUMX / etc / passwd

mỏ: ~> ls -l / etc / passwd

-rw-r - r-- 1 gốc rễ

Tuy nhiên, người dùng cần có thể thay đổi thông tin của chính họ trong tệp này. Điều này đạt được bằng cách cho passwd

chương trình các quyền đặc biệt:


mia: ~> passwd nào

passwd là / usr / bin / passwd

mia: ~> passwd nào

passwd là / usr / bin / passwd


mia: ~> ls -l / usr / bin / passwd

-rs - x - x 1 gốc root

13476 ngày 7 tháng 06 03:XNUMX / usr / bin / passwd *

mia: ~> ls -l / usr / bin / passwd

-rs - x - x 1 gốc root

hình ảnh

Khi được gọi, passwd lệnh sẽ chạy bằng cách sử dụng quyền truy cập của nguồn gốc, do đó cho phép người dùng thông thường chỉnh sửa tệp mật khẩu thuộc sở hữu của quản trị viên hệ thống.


Chế độ SGID trên tệp không xảy ra thường xuyên như SUID, vì SGID thường liên quan đến việc tạo các nhóm bổ sung. Tuy nhiên, trong một số trường hợp, chúng ta phải trải qua vấn đề này để xây dựng một giải pháp thanh lịch (đừng lo lắng về điều này quá nhiều - các nhóm cần thiết thường được tạo khi cài đặt). Đây là trường hợp của viết Tường chương trình, được sử dụng để gửi tin nhắn đến thiết bị đầu cuối của người dùng khác (tty). Các viết lệnh viết tin nhắn cho một người dùng, trong khi Tường viết cho tất cả người dùng được kết nối.


Thường không được phép gửi văn bản tới thiết bị đầu cuối hoặc màn hình đồ họa của người dùng khác. Để vượt qua vấn đề này, một nhóm đã được tạo ra, nhóm này sở hữu tất cả các thiết bị đầu cuối. Khi mà viết Tường các lệnh được cấp quyền SGID, các lệnh sẽ chạy bằng quyền truy cập áp dụng cho nhóm này, tty trong ví dụ. Vì nhóm này có quyền ghi vào thiết bị đầu cuối đích, nên người dùng không có quyền sử dụng thiết bị đầu cuối đó theo bất kỳ cách nào cũng có thể gửi tin nhắn đến thiết bị đầu cuối đó.


hình ảnh

Trong ví dụ dưới đây, người dùng joe lần đầu tiên tìm ra thiết bị đầu cuối mà phóng viên của anh ấy được kết nối, bằng cách sử dụng ai chỉ huy. Sau đó, anh ấy gửi cho cô ấy một tin nhắn bằng cách sử dụng viết chỉ huy. Cũng được minh họa là các quyền truy cập trên viết chương trình và trên các thiết bị đầu cuối do người dùng nhận chiếm giữ: rõ ràng là những người khác không phải chủ sở hữu người dùng không có quyền trên thiết bị, ngoại trừ chủ sở hữu nhóm có thể ghi vào thiết bị.


joe: ~> cái nào viết

viết là / usr / bin / ghi


joe: ~> ls -l / usr / bin / ghi

-rwxr-sr-x 1 tty gốc

8744 5 tháng 00 55:XNUMX / usr / bin / ghi *

joe: ~> cái nào viết

viết là / usr / bin / ghi


joe: ~> ls -l / usr / bin / ghi

-rwxr-sr-x 1 tty gốc


joe: ~> ai

jenniety1

jenny pts / 1

jenny pts / 2

jenny pts / 3

joe pts / 0

23 tháng 11 41:XNUMX

23 tháng 12 21:0 (: XNUMX)

23 tháng 12 22:0 (: XNUMX)

23 tháng 12 22:0 (: XNUMX)

20 tháng 10 13:XNUMX (lo.callhost.org)

joe: ~> ai

jenniety1

jenny pts / 1

jenny pts / 2

jenny pts / 3

joe pts / 0


joe: ~> ls -l / dev / tty1

crw - w ---- 1 jenny tty 4,

1 tháng 23 11 41:1 / dev / ttyXNUMX

joe: ~> ls -l / dev / tty1

crw - w ---- 1 jenny tty 4,


joe: ~> viết jenny tty1

này Jenny, chúng ta ăn trưa cùng nhau nhé?

^C

joe: ~> viết jenny tty1

này Jenny, chúng ta ăn trưa cùng nhau nhé?

^C

người sử dang xe cần trục hiển thị cái này trên màn hình của cô ấy:


tin nhắn từ [email được bảo vệ] vào ptys/1 lúc 12:36 ... này Jenny, chúng ta ăn trưa cùng nhau nhé?

EOF

tin nhắn từ [email được bảo vệ] vào ptys/1 lúc 12:36 ... này Jenny, chúng ta ăn trưa cùng nhau nhé?

EOF

Sau khi nhận được tin nhắn, có thể xóa thiết bị đầu cuối bằng cách sử dụng Ctrl+L tổ hợp phím. Để không nhận được tin nhắn nào (ngoại trừ từ quản trị viên hệ thống), hãy sử dụng thông điệp chỉ huy. Để xem những người dùng được kết nối nào chấp nhận tin nhắn từ những người khác, hãy sử dụng ai -w. Tất cả các tính năng được giải thích đầy đủ trong các trang Thông tin của mỗi lệnh.


hình ảnhTên nhóm có thể khác nhau

Lược đồ nhóm dành riêng cho phân phối. Các bản phân phối khác có thể sử dụng tên khác hoặc các giải pháp khác.


hình ảnh


Điện toán đám mây hệ điều hành hàng đầu tại OnWorks: