3333333

一【实验目的】

  1. 熟悉进程环境、进程生命周期;
  2. 支撑网络空间安全专业的专业核心能力、综合创新能力。

二【实验要求】

以下每个实验均要求:

  1. “实验源代码”处:粘贴所编写的程序源码,务必添加关键语句的注释
  2. “实验结果”:截图(包括编写的程序和运行结果)粘贴到实验结果”下方,截图需看到本人的名字及学号
  3. 有“讨论”的题目,请务必认真回答;

二【实验内容】

3-1在Shell环境下使用进程常用命令:ps、pstree、top、at、kill等,记录命令的运行结果。

3-2编写一个程序,在主进程中创建一个子进程,子进程输出“This is the child

 process!”,主进程输出进程号及子进程号。

【源程序】

#include<stdio.h>

#include<unistd.h>

#include<stdlib.h>

int main(void){

    pid_t pid;

    if((pid = fork()) == -1){//调用fork()函数创建子进程,若是创建失败返回-1

        perror("fork failure!");

        exit(1); //退出进程,指定返回值1

    } else if(pid > 0){//父进程

        printf("parent process,pid = %d,ppid = %d\n",getpid(),getppid());

    } else if(pid == 0){//子进程

        printf("This is the child process\n");

    }

}// of main

//gcc wtc3_2.c -o wtc3_2

3-3编写一个程序,在主进程中分别创建两个子进程,其中一个为僵尸进程,另一个为孤儿进程。

【源程序】

#include<stdio.h>

#include<sys/wait.h>

#include<stdlib.h>

#include<unistd.h>

int main(void){

    pid_t pid;

    int i;

    for(i = 0; i < 2; i++){//创建两个进程

        if((pid = fork()) == 0)//子进程不会再创建进程

            break;

    }

    if(i == 0){//i == 0时创建的为孤儿进程

        if((pid = fork()) == -1){//创建失败

            perror("fork failure!");

        } else if(pid == 0){//子进程

            printf("pid = %d,ppid = %d\n",getpid(),getppid());

            sleep(3);

            printf("pid = %d,ppid = %d\n",getpid(),getppid());

        } else {

            sleep(1);

            printf("parent process PID = %d\n",getpid());

            exit(EXIT_SUCCESS);

        }

    } else if(i == 1){//i == 1时创建的为僵尸进程

        sleep(5);

        if((pid = fork()) == -1){//创建失败

            perror("fork failure!\n");

        } else if(pid == 0){//子进程

            printf("child process %d will become a zomibie!\n",getpid());

            exit(EXIT_SUCCESS);

        }

        sleep(2);

        system("ps u");//查看当前用户有哪些进程

        exit(EXIT_SUCCESS);

    }

}// of main

// gcc wtc3_3.c -o wtc3_3

3-4编写一个程序,在主进程中创建一个子进程,主进程接收子进程的结束状态,并输出子进程的结束状态。

【源程序】

#include<stdio.h>

#include<sys/wait.h>

#include<stdlib.h>

#include<unistd.h>

int main(void){

    pid_t pid,w;

    if((pid = fork()) == -1){ //调用fork()函数创建子进程,若是创建失败返回-1

        perror("fork failure!");

        exit(1); //退出进程,指定返回值1

    } else if(pid == 0){//子进程

        sleep(1);//子进程睡眠1秒

        printf("Child process:pid = %d\n",getpid());

    } else if(pid > 0){ //父进程

        w = wait(NULL);//暂停当前进程直至其子进程结束,并获取子进程结束时的状态

        printf("Catch a child process,pid = %d\n",getpid());

    }

}// of main

3-5(选做)编写一个程序,调用exec簇函数打开所使用系统中的网络浏览器。

【源程序】

#include<stdio.h>

#include<stdlib.h>

#include<unistd.h>

int main(void){

        int flag;

        pid_t pid;

        char *const argv[] = {"%U", "--user-data-dir=/home/Administrator/firefox", NULL};

        if((pid = fork())==0) {

            //启动firefox浏览器,在寻找firefox位置时可以用whereis firefox

            flag = execv("/usr/bin/firefox", argv);//调用execv,打开Firefox

            if(flag == -1){//网页打开失败

                printf("exec error!\n");

            }else{//网页打开成功

                printf("exec success!");

            }

        }

        return 0;

}//of main

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_57872164

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值