3333333

3333333进程系统级_编写一个程序

一【实验目的】

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

二【实验要求】

以下每个实验均要求:

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

二【实验内容】

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

3333333

3333333

3333333

3333333

3333333

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

3333333

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

3333333

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

3333333

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

3333333

今天的文章3333333分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/83234.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注