Lại về process trong unix
Linux
77
System
17
White

LinhPT viết ngày 27/02/2017

Đã có rất nhiều bài viết về process trên linux trên kipalog

Trong bài viết này tôi sẽ nói thêm một chút về mối quan hệ giữa các process. Bài viết lấy kiến thức từ trong cuốn Advanced Programming in the Unix environment (3rd version).

Terminal Login

Ở phiên bản unix thời xưa, người dùng sẽ kết nối (login) vào hệ thống unix dựa vào thiết bị đầu cuối câm (dumb terminal) vật lý, được nối thẳng với hệ thống thông qua dây (hard-wired connection). Khi đó thì mỗi hệ thống phải có driver để có thể kết nối sử dụng thiết bị đầu cuối đó. Sau đó với sự ra đời của bitmapped terminal, thì người dùng đã có thể tương tác với hệ thống thông qua shell command line hoặc thông qua hệ thống window (UI) mà chúng ta vẫn hay sử dụng khi cài đặt phiên bản linux desktop.

Trên linux thì để kết nối vào hệ thống, chúng ta sử dụng một cơ chế tương đối giống với BSD, thông qua tty.

alt text

init process (PID 1) sẽ đọc tất cả các device có trong /etc/ttys, sau đó sẽ fork và thực thi một chương trình có tên là getty. Getty sẽ gọi hàm open để mở một terminal device mới, mà ở đó chúng ta có thể viết/đọc từ nó. Do trên linux mọi thứ đều chỉ là file nên bạn có thể hiệu getty sẽ mở ra một file mà cả user lẫn hệ thống đều có thể đọc/ghi vào nó, mà thông qua đó cho chúng ta một cách tương tác với hệ thống, như ra lệnh chạy một chương trình chẳng hạn. Getty sẽ bắt chúng ta nhập user name, mà sau khi nhập xong thì nó sẽ gọi một chương trình khác gọi là login

execle("/bin/login", "login", "-p", username, (char *)0, envp);

alt text

Login sẽ làm rất nhiều việc trong đó quan trọng nhất là việc nhập, xác thực password. Sau khi password xác thực nó sẽ làm thêm một số thao tác như là chdir, chown....

Process Group

Mỗi một process sẽ thuộc về một process group (một nhóm các process), mà thường liên quan đến cùng một job, và nhận được signal đến từ cùng một terminal . Process group id tương tự như process id, là một số nguyên dương, mà có thể lấy thông qua

#include <unistd.h>

pid_t getpgrp(void);

Mỗi một process group sẽ có một process leader, mà đặc trưng của process đó là có PID bằng với group id. Một process có thể gia nhập vào một group đã có hoặc tạo mới thông qua việc gọi hàm setpgid.

Session

Một session bao gồm một hoặc nhiều process group.

alt text

Một process tạo mới session thông qua hàm setsid. Khi hàm này được gọi thì

  1. Process đó sẽ trở thành session leader của session mới được tạo.
  2. Process đó sẽ trở thành process group leader của group mới được tạo.
  3. Process này sẽ không có "controlling terminal" (controlling terminal là gì sẽ được bàn trong mục tiếp)

Controlling terminal

Session và process group sẽ có một vài đặc điểm sau:

  • Một session sẽ có thể có một "controlling terminal", mà thông thường là terminal mà chúng ta đang kết nối vào (logged in)
  • Session leader mà đang tạo kết nối đến controlling terminal gọi là controlling process
  • Process group trong một session có thể được chia thành một foreground process group và một hoặc nhiều background process groups.
  • Khi chúng ta ấn control-C thì interrupt signal sẽ được gửi đến tất cả các process ở foreground
  • Khi chúng ta ấn control-backslash thì interrupt signal sẽ được gửi đến tất cả các process ở foreground

alt text

Để một chương trình đảm bảo là nó đang nói chuyện với controlling terminal nó sẽ sử dụng file /dev/tty.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

LinhPT

20 bài viết.
57 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
33 3
Mình thi thoảng phải quản lý linux server, mà trong đó có một số thao tác quản lý quan trong như quản lý đĩa cứng, quản lý mạng, quản lý đường truy...
LinhPT viết hơn 2 năm trước
33 3
White
23 2
(Ảnh) Tiêu đề chỉ là câu khách :v, thực ra là có một vài điểm về mysql explain mà chắc chưa nhiều bạn biết, tớ cũng hay quên nên note lại cho nhớ ...
LinhPT viết hơn 2 năm trước
23 2
White
18 0
Bài viết được dịch từ http://qiita.com/sion_cojp/items/04a2aa76a1021fe77079 Điều cần nhớ trước khi đánh bất kì câu lệnh nào ①Để tránh làm nặng...
LinhPT viết 9 tháng trước
18 0
Bài viết liên quan
White
1 0
sudo du sh
t viết gần 2 năm trước
1 0
Male avatar
32 10
Thời kỳ mới đi làm tôi nghĩ cứ phải gõ thật nhiều cho quen cho nhớ nhưng lâu dần việc đó cho cảm giác thật nhàm chán. Hiện giờ, những gì tôi hay là...
manhdung viết gần 3 năm trước
32 10
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
20 bài viết.
57 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!