操作系统实验报告07—守护进程
《操作系统》实验报告

《操作系统》实验报告一、实验目的操作系统是计算机系统中最为关键的组成部分之一,本次实验的主要目的是深入理解操作系统的基本原理和功能,通过实际操作和观察,熟悉操作系统的核心概念,包括进程管理、内存管理、文件系统和设备管理等,提高对操作系统的实际应用能力和问题解决能力。
二、实验环境本次实验在以下环境中进行:操作系统:Windows 10开发工具:Visual Studio 2019编程语言:C++三、实验内容1、进程管理实验进程是操作系统中最基本的执行单元。
在这个实验中,我们使用C++编写程序来创建和管理进程。
通过观察进程的创建、执行和结束过程,理解进程的状态转换和资源分配。
首先,我们编写了一个简单的程序,创建了多个子进程,并通过进程标识符(PID)来跟踪它们的运行状态。
然后,使用等待函数来等待子进程的结束,并获取其返回值。
在实验过程中,我们发现进程的创建和销毁需要消耗一定的系统资源,而且进程之间的同步和通信需要谨慎处理,以避免出现死锁和竞争条件等问题。
2、内存管理实验内存管理是操作系统的核心功能之一,它直接影响系统的性能和稳定性。
在这个实验中,我们研究了动态内存分配和释放的机制。
使用 C++中的 new 和 delete 操作符来分配和释放内存。
通过观察内存使用情况和内存泄漏检测工具,了解了内存分配的效率和可能出现的内存泄漏问题。
同时,我们还探讨了内存分页和分段的概念,以及虚拟内存的工作原理。
通过模拟内存访问过程,理解了页表的作用和地址转换的过程。
3、文件系统实验文件系统是操作系统用于管理文件和目录的机制。
在这个实验中,我们对文件的创建、读写和删除进行了操作。
使用 C++的文件流操作来实现对文件的读写。
通过创建不同类型的文件(文本文件和二进制文件),并对其进行读写操作,熟悉了文件的打开模式和读写方式。
此外,还研究了文件的权限设置和目录的管理,了解了如何保护文件的安全性和组织文件的结构。
4、设备管理实验设备管理是操作系统与外部设备进行交互的桥梁。
Unix操作系统下的守护进程

Unix操作系统下的守护进程Linux或者Unix操作系统中,在系统引导的时候会开启很多服务,这些服务就叫做守护进程。
守护进程是脱离于终端并且在后台运行的进程。
守护进程脱离终端是为了避免进程在执行过程中产生的信息在任何终端上显示,另外进程也不会被任何终端所产生的信息所打断。
守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。
它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
守护进程常常在系统引导装入时启动,在系统关闭时终止。
Linux系统有很多守护进程,大多数服务都是通过守护进程实现的。
同时,守护进程还能完成许多系统任务。
例如,计划任务进程crond、http进程httpd等(这里的结尾字母d就是Daemon的意思)。
在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。
但是守护进程却能够突破这种限制,它从被执行时开始运转,直到整个系统被关闭时才退出。
如果想让某个进程不因为终端或其它的变化而受到影响,那么必须把这个进程变成一个守护进程。
Linux是基于Syetem V的SVR4并遵循Posix标准,实现起来与BSD4相比更方便。
守护进程的编程要点如下;1. 在后台运行。
为避免挂起控制终端将Daemon放入后台执行。
方法是在进程中调用fork使父进程终止,让Daemon在子进程中后台执行。
if(pid=fork())exit(0);//是父进程,结束父进程,子进程继续2. 脱离控制终端,登录会话和进程组有必要先介绍一下Linux中的进程与控制终端,登录会话和进程组之间的关系:进程属于一个进程组,进程组号(GID)就是进程组长的进程号(PID)。
登录会话可以包含多个进程组。
这些进程组共享一个控制终端。
这个控制终端通常是创建进程的登录终端。
操作系统进程控制实验报告

操作系统进程控制实验报告一、实验目的操作系统进程控制是操作系统中的重要概念和核心功能之一。
本次实验的目的在于深入理解操作系统中进程的概念、状态及其转换,掌握进程创建、终止、阻塞和唤醒等操作的实现原理和方法,通过实际编程和调试,观察进程的行为和特性,从而提高对操作系统原理的理解和应用能力。
二、实验环境本次实验使用的操作系统为 Windows 10,编程语言为 C++,开发工具为 Visual Studio 2019。
三、实验原理(一)进程的概念进程是操作系统中进行资源分配和调度的基本单位,它包含了程序代码、数据、堆栈等资源。
进程具有独立性、动态性和并发性等特点。
(二)进程的状态进程的状态通常包括就绪态、运行态和阻塞态。
就绪态表示进程已具备运行条件,等待被调度;运行态表示进程正在 CPU 上执行;阻塞态表示进程因等待某个事件而暂停执行。
(三)进程控制的基本操作1、进程创建:通过系统调用创建新的进程,为其分配资源并初始化。
2、进程终止:当进程完成任务或出现异常时,结束其执行并回收资源。
3、进程阻塞:进程在等待某个事件时,主动进入阻塞态。
4、进程唤醒:当等待的事件发生时,将阻塞的进程唤醒,使其进入就绪态。
四、实验内容与步骤(一)进程创建1、编写 C++程序,使用系统提供的函数创建新的进程。
2、在新进程中执行特定的任务,例如打印输出信息。
```cppinclude <windowsh>include <iostream>int main(){STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si, sizeof(si));sicb = sizeof(si);ZeroMemory(&pi, sizeof(pi));//创建新进程if (!CreateProcess(NULL, //应用程序名称"C:\\Path\\To\\Your\\ChildProcessexe",//命令行参数NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)){std::cerr <<"CreateProcess failed Error code: "<<GetLastError()<< std::endl;return 1;}//等待子进程结束WaitForSingleObject(pihProcess, INFINITE);//关闭进程和线程句柄CloseHandle(pihProcess);CloseHandle(pihThread);return 0;}```(二)进程终止1、在创建的进程中设置条件,当满足条件时主动终止进程。
守护进程管理与计划任务实验报告总结

守护进程管理与计划任务实验报告总结
1、/etc/services文件说明了可提供服务的端口号和名字。
2、几乎所有的网络服务程序都可以配置由超级服务器来启动。
守护进程的运行方式。
独立运行的守护进程由init脚本负责管理,存放在/etc/rc、d/init、d目录下。
所有的系统服务都是独立运行的,如crond,syslogd,xinetd 等。
由网络守护进程的服务程序运行的守护进程,由xinetd启动,主配置文件是/etc/xinetd、conf,且本身是独立运行的守护进程。
可使用pstree命令查看进程树。
xineted具有如下功能:
1、支持TCP,UCP,RPC的服务。
2、基于时间段的访问控制。
3、完备的log功能,既可以记录连接成功,也可以记录连接失败的行为。
4、能有效的防止DoS攻击。
5、能限制同时运行的同一类型的服务器数目。
6、能限制启动的所有服务器数目。
7、能限制log文件大小。
8、将某个服务绑定在系统接口上,从而实现只允许私有网络访问某项服务。
9、能实现作为其他系统的代理。
《操作系统》实验报告

一、实验目的1. 理解进程的概念及其在操作系统中的作用。
2. 掌握进程的创建、调度、同步和通信机制。
3. 学习使用进程管理工具进行进程操作。
4. 提高对操作系统进程管理的理解和应用能力。
二、实验环境1. 操作系统:Windows 102. 软件环境:Visual Studio 20193. 实验工具:C++语言、进程管理工具(如Task Manager)三、实验内容1. 进程的创建与销毁2. 进程的调度策略3. 进程的同步与互斥4. 进程的通信机制四、实验步骤1. 进程的创建与销毁(1)创建进程使用C++语言编写一个简单的程序,创建一个新的进程。
程序如下:```cpp#include <iostream>#include <windows.h>int main() {// 创建进程STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si, sizeof(si));si.cb = sizeof(si);ZeroMemory(&pi, sizeof(pi));// 创建进程if (!CreateProcess(NULL, "notepad.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {std::cout << "创建进程失败" << std::endl;return 1;}std::cout << "进程创建成功" << std::endl;// 等待进程结束WaitForSingleObject(pi.hProcess, INFINITE);// 销毁进程CloseHandle(pi.hProcess);CloseHandle(pi.hThread);return 0;}```(2)销毁进程在上面的程序中,通过调用`WaitForSingleObject(pi.hProcess, INFINITE)`函数等待进程结束,然后使用`CloseHandle(pi.hProcess)`和`CloseHandle(pi.hThread)`函数销毁进程。
守护进程

一、什么是守护进程?守护进程是脱离于终端并且在后台运行的进程。
(1)守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示(2)并且进程也不会被任何终端所产生的终端信息所打断。
守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。
它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
守护进程常常在系统引导装入时启动,在系统关闭时终止。
Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,例如web服务。
守护进程最大的特点是运行在后台,与终端无连接,除非特殊情况下,用户不能操作守护进程。
由于在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。
但是守护进程却能够突破这种限制,它从被执行开始运转,直到整个系统关闭时才退出。
如果想让某个进程不因为用户或终端或其他地变化而受到影响,那么就必须把这个进程变成一个守护进程。
二、守护进程的特性守护进程最重要的特性是后台运行。
其次,守护进程必须与其运行前的环境隔离开来。
这些环境包括未关闭的文件描述符,控制终端,会话周期和进程组,工作目录以及文件创建掩模等。
这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。
最后,守护进程的启动方式有其特殊之处。
它可以在Linux系统启动时从启动脚本/etc/r c.d中启动,可以由作业规划进程crond启动,还可以由用户终端(通常是shell)执行。
总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。
因此,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程。
三、进程后台运行与守护进程的区别当进程处在后台运行时,关闭终端,则会将进程关闭;但是当关闭终端时,守护进程继续运行。
linux之进程基础(七)、守护进程、进程组等概念
linux之进程基础(七)、守护进程、进程组等概念7. 守护进程、进程组等概念7.1 守护进程特点运⾏⽅式守护进程,也就是通常所说的Daemon进程,是Linux中的后台服务进程。
周期性的执⾏某种任务或等待处理某些发⽣的事件。
Linux系统有很多守护进程,⼤多数服务都是⽤守护进程实现的。
⽐如:像我们的tftp,samba,nfs等相关服务。
同时Linux的⼤多数服务器就是⽤守护进程实现的。
⽐如,Internet服务器inetd,Web服务器httpd等。
⽣命周期守护进程会长时间运⾏,常常在系统启动时就开始运⾏,直到系统关闭时才终⽌守护进程不依赖于终端显⽽异见,从终端开始运⾏的进程都会依附于这个终端,这个终端称为这些进程的控制终端。
当控制终端被关闭时,相应的进程都会被⾃动关闭。
咱们平常写进程时,⼀个死循环程序关闭终端的同时也关闭了我们的程序,但是对于守护进程来说,其⽣命周期守护需要突破这种限制,它从开始运⾏,直到整个系统关闭才会退出,所以守护进程不能依赖于终端。
守护进程的⽗进程为init 进程7.2 查看守护进程7.2.1 查看命令:ps -ajx-a: 显⽰所有-x:显⽰没有控制终端的进程-j:显⽰与作业有关的信息(显⽰的列):会话期ID(SID),进程组ID(PGID),控制终端(TTY),终端进程组ID(TRGID)7.2.2 识别守护进程输⼊ps -ajx 命令后所有的守护进程都是以超级⽤户启动的(UID为0);没有控制终端(TTY为?);终端进程组ID为-1(TPGID表⽰终端进程组ID,该值表⽰与控制终端相关的前台进程组,如果未和任何终端相关,其值为-1;所有的守护进程的⽗进程都为init进程(PID为1的进程)。
例如:cron 进程就是⼀个守护进程7.3 与进程相关的⼀些概念7.3. 1 进程组进程组是⼀个或多个进程的集合。
进程组由进程组ID(PGID)来唯⼀标识。
每个进程组都有⼀个组长进程,进程组ID就是组长进程的进程号。
什么是守护进程?
什么是守护进程?在了解守护进程之前,需要先知道什么是什么是终端?什么是作业?什么是进程组?什么是会话?在 Linux 中,每⼀个系统与⽤户进⾏交流的界⾯称为终端,每⼀个从此终端开始运⾏的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会⾃动关闭。
守护进程就是⼀个⽣存周期较长,独⽴于控制终端并且周期性执⾏某种任务的进程。
之所以要脱离终端,就是为了防⽌进程运⾏过程中被任何终端信息所打断。
所以,要创建守护进程,我们就要将这个进程脱离终端。
shell分前后台作业来控制的不是进程⽽是作业。
⼀个作业由多个进程组成。
Shell可以运⾏⼀个前台作业和任意多个后台作业,称为作业控制。
bash就是⼀个独⽴的作业。
进程组是⼀个或多个进程的集合,每个进程除了有⼀个PID以外,还有⼀个PGID。
PGID就是组长的PID。
进程组通常和⼀个作业相关联,可以接收来⾃同⼀个终端的信号。
当然,进程组和作业也并不是完全等价的两个概念:如果作业中某个进程有创建了新的⼦进程,该⼦进程不属于作业,但属于该进程组。
会话(Session)是⼀个或多个进程组的集合。
⼀个会话可以有⼀个控制终端。
⼀个会话中,有⼀个前台作业和若⼲个后台作业。
会话SID是会话⼿进程的PID。
为什么只能运⾏⼀个前台作业?当我们在前台新起了⼀个作业,shell就被提到了后台,因此shell就没有办法再继续接受我们的指令并且解析运⾏了。
但是如果前台进程退出了,shell就会有被提到前台来,就可以继续接受我们的命令并且解析运⾏。
那么,如何来切断进程和终端的关系呢?⾸先,调⽤ setsid() 使⼦进程成为新的会话组长。
setsid() 调⽤成功后,进程成为新的会话组长和新的进程组长,并与原来的登录会话和进程组脱离。
调⽤setsid()有⼀个前提,就是该进程不能是⼀个组长进程,因此需要先fork并且杀死⽗进程,setsid ()的调⽤者是⼦进程。
Linux守护进程
启动⼀个服务systemctl start {filename}.service 重启⼀个服务systemctl restart {filename}.service 重载⼀个服务配置systemctl reload {filename}.service重载所有修改过的配置systemctl daemon-reload关闭⼀个服务systemctl stop {filename}.service 显⽰服务状态systemctl status {filename}.service 设置开机启动systemctl enable {filename}.service 关闭开机启动systemctl disable {filename}.service 启动失败的服务列表systemctl --failed查看服务活动详细列表systemctl list-units 列出服务配置⽂件状态systemctl list-unit-files查看服务是否开机启动systemctl is-enabled {filename}.serviceLinux 守护进程什么是守护进程脱离控制终端的,运⾏于后端的进程,由系统管理的,按计划⾃动启动/停⽌/重启,⽤以执⾏特定的任务。
为什么要有守护进程?在某些需求场景下,我们希望某项系统任务能够按计划按预期,始终/⾃动 保持正常运⾏状态,以便于持续提供服务功能。
⼀个⼩栗⼦,假如,我们部署⼀个站点服务,当服务器操作系统⾃动重启后,我们希望部署的站点服务也能够⾃动启动,⽆需⼈⼯去启动。
再举⼀个⼩栗⼦,假如,以上部署的站点服务,遇到运⾏错误异常后能够⾃动重启,以保持正常运⾏状态,⽆需⼈⼯⼲预。
再举⼀个⼩栗⼦,假如,某些服务,我们希望它,在每天的凌晨⾃动启动并运⾏,在每天的凌晨5点⾃动关闭,⽆需⼈⼯⼲预。
脱离终端的后台进程不依赖于任何终端,不因连接终端的变化⽽对进程的运⾏产⽣关联或影响,与当前环境隔离开来,让程序本⾝能够⾃动进⼊后台运⾏。
2012级操作系统实验报告
哈尔滨学院实验报告课程名称:计算机操作系统专软件工程业:级:班128-号:学*********名:***教务处制实验一进程管理【实验目的与要求】⒈加深对进程概念的理解,明确进程与程序的区别。
⒉掌握Linux进程创建及撤销的方法,进一步认识并发执行的实质。
⒊掌握Linux系统下守护进程的创建方法。
【实验原理】⒈ Linux进程管理命令⑴进程查看⑵进程终止⑶进程优先级设置⒉ Linux进程控制函数⑴创建和修改进程⑵设置进程属性⑶获取进程属性⑷进程的退出⒊ Linux守护进程⑴独立启动守护进程⑵超级守护进程⑶守护进程的编写流程守护进程的编写遵循特定的流程,主要包括五个步骤:Step⒈创建子进程,退出父进程Step⒉在子进程中创建新会话Step⒊改变当前目录为根目录Step⒋重设文件权限掩码Step⒌关闭文件描述符【实验主要仪器与材料】⒈带Linux操作系统的PC机⒉ GCC编译器【实验内容】⒈获取进程信息通过管理命令,获取系统当前执行进程的信息,包括进程名称与ID、PID 和PGID等。
⒉创建进程编程程序,实现父进程创建一个子进程,返回后父子进程都分别循环输出字符串“I am parent.”或“I am child.”5次,每输出一次延时1秒(sleep(1)),然后进入下一次循环。
观察并分析运行结果。
然后将程序改为父子进程同步执行:子进程循环输出字符串“I am child.”5次,然后父进程再循环输出字符串“I am parent.”5次。
再次观察并分析运行结果。
【实验步骤及实验结果分析】⒈实验内容1通过进程实现及验证父进程及子进程的id号的命令ps -lg⒉实验内容2⑴实现父进程创建一个子进程,返回后父子进程都分别循环输出字符串“I am parent.”或“I am child.”5次,每输出一次延时1秒(sleep(1)),然后进入下一次循环。
#include<sys/types.h>#include<unistd.h>#include<stdio.h>int main(){pid_t pt;printf("Hello world!\n");int i;pt=fork();for(i=0;i<5;i++){if(pt==-1)printf("Fork error.\n");else if{printf("I am a parent.\n");Sleep(1);}else{printf("I am a child.\n");Sleep(1);}}return 0;}⑵父子进程同步执行:子进程循环输出字符串“I am child.”5次,然后父进程再循环输出字符串“I am parent.”5次。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《计算机操作系统》实验报告
实验序号:06 实验项目名称:守护进程的创建
18数科1 学号姓名专业、班
实验地点指导教师实验时间2020/6/3
一、实验目的及要求
1. 掌握Linux系统下守护进程的创建方法。
2. 掌握编写守护进程的五个基本步骤。
二、实验基本原理(守护进程相关知识)
三、实验内容与步骤
创建一个守护进程,并利用该进程每20秒向daemon.log日志文件中写入当前时间,当守护进程收到kill命令后退出。
四、实验步骤
1)创建守护进程;
2)在root用户下,利用ps查看守护进程;
3)查看日志文件内容;
4)退出(即关闭)守护进程。
5)再次利用ps命令查看守护进程关闭结果。
五、截图
六、代码
七、教师评语
签名:
日期:成绩。