báo cáo bài tập nhập môn hệ điều hành lab 3 2

16 0 0
Tài liệu đã được kiểm tra trùng lặp
báo cáo bài tập nhập môn hệ điều hành lab 3 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Viết chương trình để truyền đối vào số nguyên dương n vào và...102.. Sử dụng lời gọi system để viết chương trình thực thi các lệnh Linux đã học..113.. Tạo ra cây tiến trình như sau, với

Trang 1

TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO BÀI TẬP NMHĐH HK2, 2021-2022

Lab 3Thành Viên: Nguyễn Ngô Đăng Khoa (521H0084)

1 Viết chương trình để truyền đối vào số nguyên dương n vào và 10

2 Sử dụng lời gọi system() để viết chương trình thực thi các lệnh Linux đã học 11

3 Tạo ra cây tiến trình như sau, với mỗi tiến trình con, in ra ID của nó và ID của tiến trình cha 124 Viết một chương trình lặp vô tận với lời gọi while(1); và thực thi nó Đưa tiến trình này vào “background” thông qua việc gửi tín hiệu SIGTSTP bằng cách nhấn Ctrl + Z Sử dụng lệnh ps để xác định PID của nó và sử dụng kill để kết thúc nó.145 Viết chương trình mà khi chạy nó sinh ra tiến trình con, để tiến trình con trở thành zombie Tiến trình zombie này cần tồn tại trong hệ thống tối thiểu 10 giây (bằng cách dùng lời gọi sleep(10)) Sau đó dùng lệnh ps –l để xem trạng thái các

Trang 2

tiến trình Kết liễu zombie này bằng cách xác định PID của tiến trình cha nó và sử dụng lệnh kill 15KẾT LUẬN 16

Trang 3

A PHẦN THỰC HÀNHVí Dụ 1: 1.1 Tạo tiến trình

A: Code Chương Trình

Chúy ý: code phải được giải thích để thể hiện hiểu rõ chương trình mình biết//P1.c

printf("Current process ID: %d\n", getpid()); printf("Parent process ID: %d\n", getppid()); return ;0

{ // make two process which run same

// program after this instruction

ộ // Thêm m t vài l nh printf và theo dõi.ệ

fork(); fork();

Trang 4

// thêm m t vài l nh fork vào đây và xem thay đ i.

printf("Hello world! from Process ID: %d\n",

getpid()); return ;0

(pid ) if <0 printf("fork error! No child created\n"); elseif(pid ==0)

{

//sleep(2);

printf("Hello from Child!\n"); printf("Child ID is %d!\n", getpid()); }

else

{

printf("Hello from Parent!\n"); printf("Parent ID is %d!\n", getpid()); }

Trang 5

// Fork returns process id

// Child process

else exit(0);

return ;0

Trang 6

// A C program to demonstrate Orphan Process // Parent process finishes execution while the// child process is running The child process// becomes orphan.

// Create a child process

pid int =fork();

(pid )if >0

printf("in parent process\n");

// Note that pid is 0 in child process

// and negative if fork() fails

elseif (pid ==0) {

sleep( );6

printf("in child process\n"); }

return ;0

}

Trang 8

intmain( intargc, char *argv[]){

pnum, count, retval, child_no;int

pnum =atoi(argv[ ]);1

child_no count;=

printf("Tien trinh %d, PID %d\n", child_no,

getpid()); } else

{

for(count ; count pnum; count=0 < ++) wait(NULL); printf("Tien trinh cha PID %d\n", getpid()); }

Trang 9

{ i;int

pid int =fork(); (pid if == )0

for = (i ; i ; i0 <5 ++) printf("I am Child\n"); else

{

signal(SIGCHLD,SIG_IGN); printf("I am Parent\n"); while( );1

}}

B: Kết Quả Demo

Trang 10

B PHẦN BÀI TẬP

1 Viết chương trình để truyền đối vào số nguyên dương n vào và

a Tiến trình cha tiếp tục tính rồi xuất ra tổng S = 1 + 2 + … + n

b Đồng thời tạo một tiến trình con tính tổng các ước số của n và in ra màn hình.

A Code chương trình:

intmain( intargc, char *argv[]){

pid_t pid =fork();

(pid ) if <0 printf("fork error! No child created\n"); for(int = i 1 1; < argc; i++)

{

k int =atoi(argv[ ]);1

(pid if == )0

{ t ;int =0

for(int = i 1; i <= k; i++) {

(k i if % == ) t 0 += i;

Trang 11

wait(NULL);

for(int = i 0; i <= k; i++) s += i;

printf("Tong cac gia tri tu 1 den %d la: %d\n", k,s);

} return ;0

}}

Trang 12

printf("Command pwd\n"); re =system("pwd"); printf("Command ls -a\n"); re =system("ls -a");

(re if !=-1) printf("System call is done!\n"); printf("Call system to execute ps -a\n"); re =system("ps -a");

(re if !=-1) printf("System call ps is done!\n"); return ;0

Trang 13

n1 int =fork(); n2 int =fork();

(n1 if ==0) {

(n2 if ==0) {

printf("H ");

printf("my id is %d, my parentid is %d\n",

getpid(), getppid()); }

}

printf("B\n");

printf("my id is %d, my parentid is %d\n",

getpid(), getppid()); }

} return ;0

}

Trang 14

{ i;int

pid int =fork(); (pid if == )0

for = (i ; i ; i0 <5 ++) printf("I am Child\n"); else

{

Trang 15

signal SIGCHLD( ,SIG_IGN); printf("I am Parent\n"); while( );1

}}

pid_t child_pid =fork();

Trang 16

// Child process

(child_pid if >0) printf("%d\n",getpid()); // Parent process

elseif(child_pid == ) 0

sleep( );10

return ;0

Ngày đăng: 08/05/2024, 16:24

Tài liệu cùng người dùng

Tài liệu liên quan