1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo bài tập nmhđh lab 3 2 3

16 3 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Báo Cáo Bài Tập NMHĐH Lab 3
Tác giả Nguyễn Ngô Đăng Khoa
Trường học Trường Đại Học Tôn Đức Thắng
Chuyên ngành Công Nghệ Thông Tin
Thể loại Báo cáo bài tập
Năm xuất bản 2021-2022
Định dạng
Số trang 16
Dung lượng 3,15 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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.. Viết một chương trình lặp vô tận với lời gọi while1; và thực thi nó.. Viết chương trình mà khi chạy nó

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 3 Thành Viên: Nguyễn Ngô Đăng Khoa (521H0084)

Mục lục

A PHẦN THỰC HÀNH 3

Ví Dụ 1: 1.1 Tạo tiến trình 3

Ví Dụ 2: Kết thúc tiến trình 5

B PHẦN BÀI TẬP 10

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 12

4 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ó.14

5 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 15 KẾT LUẬN 16

Trang 3

A PHẦN THỰC HÀNH

Ví 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

#include stdio.h>

#include unistd.h>

int main()

{

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

}

B: Kết Quả Demo

1.2 Biên dịch và xem kết quả khi có lệnh fork():

A: Code Chương trình

// P2.c

#include stdio.h>

#include sys/types.h>

#include unistd.h>

int main()

{ // 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

}

B: Kết Quả Demo

1.3 Biên dịch và xem kết quả,:

A: Code Chương trình

// P3.c

#include stdio.h>

#include unistd.h>

int main()

{

pid_t pid;

pid = fork();

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

{

//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

return ;0

}

B: Kết Quả Demo

Ví Dụ 2: Kết thúc tiến trình

2.1 Hãy biên dịch và thực thi các tập tin zombie.c và orphan.c được cung cấp và dùng lời gọi ps rồi tìm chúng trong bảng tiến trình

A: Code Chương trình

// A C program to demonstrate Zombie Process

// Child becomes Zombie as parent is sleeping

// when child process exits

#include stdlib.h>

#include sys/types.h>

#include unistd.h>

int main()

{

// Fork returns process id

// in parent process

pid_t child_pid = fork();

// Parent process

if (child_pid > 0)

sleep(10);

// Child process

else

exit( );

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

#include<stdio.h>

#include sys/types.h>

#include unistd.h>

int main()

{

// Create a child process

int pid = fork();

if (pid )> 0

printf( in parent process\n");

// Note that pid is 0 in child process // and negative if fork() fails

else if (pid == )

{

sleep( );6

printf( in child process\n");

}

return ;0

}

Trang 7

B: Kết Quả Demo

2.2 Sau đây tạo ra một số lượng tiến trình con (được truyền vào qua đối số hàm main), in ra ID của các tiến trình con và lời gọi chờ của tiến trình cha

A: Code Chương trình

#include sys/types.h>

#include sys/wait.h>

#include stdlib.h>

#include unistd.h>

#include stdio.h>

Trang 8

int main(int argc, char *argv[])

{

int pnum, count, retval, child_no;

pnum = atoi(argv[ ]);1

if(pnum <= ) 0

{

printf( So tien trinh con phai lon hon 0");

return -1;

}

else

{

retval = 1;

for(count ; count pnum; count= 0 < ++)

{

if(retval != ) retval = fork();

else break;

}

if(retval == )

{

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()); }

}

int status ;= 5

wait( status); // ch m t trong nh ng đ a con.ờ ộ ữ ứ

return ;0

}

Trang 9

B: Kết Quả Demo

2.3 Vòng lặp

A: Code Chương trình

// A C program to demonstrate ignoring // SIGCHLD signal to prevent Zombie processes

#include<stdio.h>

#include<unistd.h>

#include<sys/wait.h>

#include<sys/types.h>

int main()

{

int i;

int pid = fork();

if (pid == )0

for (i= ; i< ; i++)

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:

#include stdio.h>

#include unistd.h>

#include sys/types.h>

#include sys/wait.h>

#include stdlib.h>

int main(int argc, char *argv[])

{

pid_t pid = fork();

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

{

int k = atoi(argv[ ]);1

if(pid == )0

{

int t ;= 0

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

{

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

Trang 11

}

printf( Tong cac uoc so la: %d\n", t);

}

else

{

int s ;= 0

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

}

}

B: Kết Quả Demo

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

A Code chương trình:

#include stdio.h>

int main(int argc, char *argv[])

{

int re;

printf( Command ls\n");

re = system( ls");

Trang 12

printf( Command pwd\n");

re = system( pwd");

printf( Command ls -a\n");

re = system( ls -a");

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

printf( Call system to execute ps -a\n");

re = system( ps -a");

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

return ;0

}

B: Kết Quả Demo

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.

A Code chương trình:

#include stdio.h>

#include unistd.h>

int main()

{

Trang 13

int n1 = fork();

int n2 = fork();

if(n1 == )

{

if(n2 == )

{

printf(" \n");

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

getpid(), getppid());

}

else

{

printf(" \n");

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

getpid(), getppid());

}

}

else if(n1 )> 0

{

printf(" \n");

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

getppid());

if(n2 == )

{

printf(" \n");

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

getpid(), getppid());

}

}

return ;0

}

Trang 14

B: Kết Quả Demo

4 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ó.

A Code chương trình:

#include stdio.h>

#include unistd.h>

#include sys/wait.h>

#include sys/types.h>

int main()

{

int i;

int pid = fork();

if (pid == )0

for (i= ; i< ; i++)

printf( I am Child\n");

else

{

Trang 15

signal SIGCHLD( ,SIG_IGN);

printf( I am Parent\n");

while( );1

}

}

B: Kết Quả Demo

5 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 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.

A Code chương trình:

#include stdlib.h>

#include stdio.h>

#include sys/types.h>

#include unistd.h>

int main()

{

pid_t child_pid = fork();

Trang 16

// Child process

if (child_pid > 0)

printf( %d\n" getpid());

// Parent process

else if(child_pid == ) 0

sleep(10);

return ;0

}

B: Kết Quả Demo

KẾT LUẬN

Sau khi học và hoàn thành phần lab 2 em thu được kết sau:

- Hoàn thành tất cả phần thực hành

- Hoàn thành được 5 bài tập (1, 2, 3, 4, 5) [71%]

Ngày đăng: 27/09/2024, 19:41

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w