操作系统实验一之进程控制实验

2024-05-15 14:18

本文主要是介绍操作系统实验一之进程控制实验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

// 编写一个多进程并发执行程序。父进程首先创建一个执行 ls 命令的子进程然后再创建一个执行 ps 命令的子进程,并控制ps 命令总在 ls 命令之前执行。
pctl.c#include "pctl.h"int main(int argc,char *argv[])
{int i;int pid1;int pid2;int status1;int status2;signal(SIGINT,(sighandler_t)sigcat);char *args1[] = {"/bin/ls","-l",NULL};char *args2[] = {"/bin/ps","-l",NULL};pid1 =fork();if(pid1<0){printf("Create Process 1 fail\n");exit(EXIT_FAILURE);}else if(pid1==0){printf("I am Child one process %d \nMy father is %d\n",getpid(),getppid());pause();for(i =0; args1[i]!=NULL; i++){printf("%s",args1[i]);}printf("\n");status1 =execve(args1[0],args1,NULL);}else{printf("\nI am Parent process %d\n",getpid());pid2 =fork();if(pid2<0){printf("Create Process 2 fail\n");exit(EXIT_FAILURE);}else if(pid2 ==0){printf("I am Child two process %d,\nMy father is %d\n",getpid(),getppid());for(i =0; args2[i]!=NULL; i++){printf("%s",args2[i]);}printf("\n");status2 = execve(args2[0], args2, NULL);}else{waitpid(pid2, &status2, 0);kill(pid1, SIGINT);}}return EXIT_SUCCESS;}pctl.h#include<sys/types.h>
#include<wait.h>
#include<unistd.h>
#include<signal.h>
#include<stdio.h>
#include<stdlib.h>
//进程?定义的键盘中断信号处理函数
typedef void(*sighandler_t) (int) ;void sigcat(){
printf("%dProcesscontinue\n",getpid());
}运行结果:I am Parent process 2353
I am Child one process 2354 
I am Child two process 2355,
My father is 2353
My father is 2353
/bin/ps-l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  2298  2286  6  80   0 -  2192 wait   pts/0    00:00:00 bash
0 S  1000  2353  2298  0  80   0 -   502 wait   pts/0    00:00:00 pctl
1 S  1000  2354  2353  0  80   0 -   502 pause  pts/0    00:00:00 pctl
0 R  1000  2355  2353  0  80   0 -   657 -      pts/0    00:00:00 ps
2354Processcontinue
/bin/ls-l
cqc@cqc-virtual-machine:~$ total 19168
-rw-rw-r--  1 cqc cqc      974 May  9 08:00 <invalid path>
-rw-r--r--  1 cqc cqc     8445 Apr  5 23:42 examples.desktop
drwxrwxr-x 15 cqc cqc    12288 Apr  6 02:09 libxml2-2.6.32
-rw-rw-r--  1 cqc cqc  4722227 Apr  6 00:16 libxml2-2.6.32.tar.gz
-rw-rw-r--  1 cqc cqc      163 May  9 06:54 makefile
-rw-rw-r--  1 cqc cqc        0 May  9 06:54 makefile~
drwxrwxr-x  2 cqc cqc     4096 May  5 05:42 nimei
-rwxrwxr-x  1 cqc cqc     9003 May  9 08:22 pctl
-rw-rw-r--  1 cqc cqc     1343 May  9 08:24 pctl.c
-rw-rw-r--  1 cqc cqc     1005 May  9 07:33 pctl.c~
-rw-rw-r--  1 cqc cqc      257 May  9 08:11 pctl.h
-rw-rw-r--  1 cqc cqc      303 May  9 06:52 pctl.h~
-rw-rw-r--  1 cqc cqc     4260 May  9 08:22 pctl.o
drwxr-xr-x 15 cqc cqc     4096 Apr  6 02:13 php-5.3.8
-rw-rw-r--  1 cqc cqc 14789551 Apr  6 01:28 php-5.3.8.tar.gz
drwxrwxr-x  4 cqc cqc     4096 May  9 07:43 workspace
drwxr-xr-x  2 cqc cqc     4096 Apr  6 02:28 ??????
drwxr-xr-x  2 cqc cqc     4096 Apr  5 23:58 ?????????
drwxr-xr-x  2 cqc cqc     4096 Apr  5 23:58 ??????
drwxr-xr-x  2 cqc cqc     4096 Apr  6 01:56 ??????
drwxr-xr-x  2 cqc cqc     4096 Apr  5 23:58 ??????
drwxr-xr-x  2 cqc cqc     4096 Apr  5 23:58 ??????
drwxr-xr-x  2 cqc cqc     4096 Apr  5 23:58 ??????
drwxr-xr-x  2 cqc cqc     4096 Apr  5 23:58 ??????

这篇关于操作系统实验一之进程控制实验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/992049

相关文章

C#如何优雅地取消进程的执行之Cancellation详解

《C#如何优雅地取消进程的执行之Cancellation详解》本文介绍了.NET框架中的取消协作模型,包括CancellationToken的使用、取消请求的发送和接收、以及如何处理取消事件... 目录概述与取消线程相关的类型代码举例操作取消vs对象取消监听并响应取消请求轮询监听通过回调注册进行监听使用Wa

Python实现局域网远程控制电脑

《Python实现局域网远程控制电脑》这篇文章主要为大家详细介绍了如何利用Python编写一个工具,可以实现远程控制局域网电脑关机,重启,注销等功能,感兴趣的小伙伴可以参考一下... 目录1.简介2. 运行效果3. 1.0版本相关源码服务端server.py客户端client.py4. 2.0版本相关源码1

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但

java 进程 返回值

实现 Callable 接口 与 Runnable 相比,Callable 可以有返回值,返回值通过 FutureTask 进行封装。 public class MyCallable implements Callable<Integer> {public Integer call() {return 123;}} public static void main(String[] args

C#关闭指定时间段的Excel进程的方法

private DateTime beforeTime;            //Excel启动之前时间          private DateTime afterTime;               //Excel启动之后时间          //举例          beforeTime = DateTime.Now;          Excel.Applicat

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(