You are on page 1of 9

LAP 3: TIẾN TRÌNH VÀ TIỂU TRÌNH

Câu 1: Mối quan hệ cha-con giữa các tiến trình


a. Vẽ cây quan hệ parent-child của các tiến trình bên dưới:

UID PID PPID

77 66 5

404 222 66

404 322 66

404 522 322

404 422 222

404 622 522

404 722 622

404 822 522

404 922 322


b. Trình bày cách sử dụng lệnh ps để tìm tiến trình cha của một tiến trình dựa vào PID
của nó
Sử dụng lệnh $ps -f để hiển thị thông tin tại thời điểm khởi chạy lệnh
Sau đó sử dụng lệnh $ps -f <id của tiến trình con > để xem id của tiến trình cha

c. Tìm hiểu và cài đặt lệnh &pstree (nếu chưa được cài đặt), sau đó trình bày cách sử
dụng lệnh này để tìm tiến trình cha của một tiến trình dựa vào PID của nó.
Dùng lệnh $pstree để hiện thị danh sách tất cả tiến trình đang chạy trên hệ thống

Một phần của cây tiến trình


Dùng lệnh $pstree -p -s <pid tiến trình> để hiển thị cây tiến trình, trong đó -p để hiện pid
còn -s cho phép xem các tiến trình cha của tiến trình con được chỉ định.
Câu 2: Chương trình dưới in ra kết quả gì? Giải thích tại sao?

Khi chạy sẽ xảy ra lỗi bởi vì thiếu các thư viện <unistd.h>, <stdlib.h>, <sys/wait.h> để
chứa các lệnh như fork(), exit(), wait()
Sau khi thêm các thư viện

Kết quả in ra là

Tiến trình in ra dòng “I see 17 coconuts” là vì:


- Khi gặp dòng thứ 9 tiến trình con sẽ xuất hiện và có pid = 0 thõa điều kiện if nên
num_coconuts = 42 khi gặp lệnh exit(0) thì kết thúc.
- Tiến trình cha có num_coconuts = 17 sau khi qua điều kiện else thì sẽ in ra dòng
chữ trên rồi mới kết thúc khi gặp exit(0).
Câu 3: Trong phần thực hành, các ví dụ chỉ sử dụng thuộc tính mặc định của pthread, hãy
tìm hiểu POSIX thread và trình bày tất cả các hàm được sử dụng để làm thay đổi thuộc tính
của pthread, sau đó viết các chương trình minh họa tác động của các thuộc tính này và chú
thích đầy đủ cách sử dụng hàm này trong chương trình
• ptherad_attr_init() : hàm tạo ra các đối tượng mang thuộc tính thread
#include<pthread.h>
#include<stio.h>
#include<stdlib.h>
void *thread_print(void*message)
{
while(1) {
Printf(“Hi, how are u?\n”);
}
int main(){
pthread_attr_t atte;
pthread_attr_init($attr);
while(1)
{
printf(“I’m fine, thank you and you?\n”);
exit(0);
}
return 0;
}

• pthread_attr_destroy(): hàm hủy các đối tượng mang thuộc tính thread
#include<pthread.h>
#include<stio.h>
#include<stdlib.h>
void *thread_print(void*message)
{
while(1) {
Printf(“Hi, how are u?\n”);
}
int main(){
pthread_attr_t atte;
pthread_attr_init($attr);
printf(“I’m fine, thank you and you?\n”);
pthread_attr_destroy(&attr);
return 0;
}

• pthread_attr_setstacksize() : Các stacksize thuộc tính sẽ xác định kích thước tối
thiểu ngăn xếp (theo byte) được phân bổ cho các chủ đề chồng tạo ra.
#include<pthread.h>
#include<stio.h>
#include<stdlib.h>
int main() {
pthread_attr_init(&attr)
pthread_attr_getstacksize(&attr, &stacksize);
printf(“Thread stack size = %d byte \n”, stacksize);
return 0;}
Câu 4: Viết chương trình làm các công việc sau theo thứ tự:
a. In ra dòng chữ: “Welcome to IT007, I am <your student ID>!”
b. Mở tệp abcd.txt bằng vim editor
c. Tắt vim editor khi người dùng nhấn CRTL+C
d. Khi người dùm nhấn CRTL+C thì in ra dòng chữ: “You are pressed CRTL+C!
Goodbye!”
Phân tích đoạn code như sau:

Tạo hàm on_signit, bên trong hàm nếu giá trị loop = 1 thì thực hiện lệnh printf in ra dòng
chữ “You are pressed CTRL+C! Goodbye!” và giá trị loop giảm đi 1 đơn vị.

Tạo hàm on_signit2, bên trong hàm nếu giá trị loop = 2 thì thực hiện lệnh system trả về khi
thực hiện lệnh “pkill wim”.

Tạo một con trỏ hàm open_vim, hàm system() thực hiện lệnh “gnome-terminal – vim
abcd.txt “ và trả về khi thực hiện xong lệnh, tiếp theo là truyền thông tin giữ các tín hiệu
qua lệnh signal, khi gặp signal: SIGNT có nghĩa là được thông báo nếu người sử dụng gửi
1 tiến hiệu ngắt (Crtl+C) và thực hiện hàm on_signit2, khi giá trị loop != 1 sẽ thoát khỏi
vòng lặp và kết thúc hàm.

Hàm main sẽ in ra dòng chữ “Welcome to IT007, I am20521976” sau đó là đến hàm
pthread_create để tạo tiến trình với id_thread là biến tham chiếu kiểu pthread_t và
*open_vim là một con trỏ hàm kiểu void đến chức năng mong muốn tiểu trình thực thi.
Lệnh pthread_join() sẽ ngưng pthread đang gọi tới. Khi gặp hàm signal, có tên signal là
SIGINT thông báo người dùng gửi 1 tín hiệu ngắt (Crtl+C) và thực hiện hàm on_signit, khi
giá trị loop != 0 thoát khỏi vòng lặp, xuống dòng và kết thúc.
Khi thực hiện chương trình:

Sau đó nhấn crtl+C để xuất hiện tệp abcd.txt

Nhấn tiếp crtl+C để xuất hiện dòng chữ dưới

You might also like