Linux进程管理-实验报告
进程管理演示实验报告
一、实验目的1. 理解进程的概念及其在操作系统中的作用。
2. 掌握Linux系统中进程的创建、调度、同步和通信方法。
3. 熟悉进程的阻塞、挂起、恢复和终止操作。
4. 学习使用相关命令和工具进行进程管理和调试。
二、实验环境操作系统:Linux开发环境:GCC、Xshell三、实验内容1. 进程创建与调度2. 进程同步与通信3. 进程阻塞与恢复4. 进程终止与调试四、实验步骤1. 进程创建与调度(1)编写一个简单的C程序,使用fork()函数创建一个子进程。
(2)在父进程中,使用getpid()和getppid()函数获取进程ID和父进程ID。
(3)使用ps命令查看当前系统中的进程,观察父进程和子进程的状态。
(4)使用waitpid()函数等待子进程结束。
2. 进程同步与通信(1)编写一个使用管道(pipe)进行进程间通信的C程序。
(2)父进程向管道中写入数据,子进程从管道中读取数据。
(3)使用ps命令查看进程状态,观察管道通信的效果。
(4)编写一个使用信号量(semaphore)进行进程同步的C程序。
(5)使用sem_wait()和sem_post()函数实现进程同步。
3. 进程阻塞与恢复(1)编写一个使用sleep()函数使进程阻塞的C程序。
(2)在父进程中,使用waitpid()函数等待阻塞的子进程结束。
(3)使用kill()函数向阻塞的进程发送SIGCONT信号,使其恢复执行。
4. 进程终止与调试(1)编写一个使用exit()函数终止进程的C程序。
(2)在父进程中,使用waitpid()函数等待终止的子进程。
(3)使用gdb调试器分析程序运行过程中出现的问题。
五、实验结果与分析1. 进程创建与调度实验结果表明,使用fork()函数成功创建了子进程,父进程和子进程的进程ID和父进程ID被正确获取。
通过ps命令,可以观察到父进程和子进程的状态。
2. 进程同步与通信实验结果表明,管道通信可以成功实现父进程和子进程之间的数据传递。
进程管理实验报告源代码(3篇)
第1篇---进程管理实验报告一、实验目的1. 理解进程的概念和进程管理的基本原理。
2. 掌握进程的创建、调度、同步和通信等操作。
3. 通过编程实现简单的进程管理功能。
二、实验环境1. 操作系统:Windows/Linux2. 编程语言:C/C++3. 开发环境:Visual Studio/Code::Blocks三、实验内容1. 进程的创建与终止2. 进程的同步与互斥3. 进程的通信4. 进程调度算法四、实验步骤1. 进程的创建与终止```cinclude <stdio.h>include <sys/types.h>include <unistd.h>int main() {pid_t pid;// 创建子进程pid = fork();if (pid < 0) {// 创建进程失败perror("fork failed");return 1;} else if (pid == 0) {// 子进程printf("Child process, PID: %d\n", getpid()); // 执行子进程的任务...sleep(5); // 子进程暂停5秒_exit(0); // 子进程退出} else {// 父进程printf("Parent process, PID: %d\n", getpid()); wait(NULL); // 等待子进程结束printf("Child process has terminated.\n");}return 0;}```2. 进程的同步与互斥```cinclude <stdio.h>include <pthread.h>pthread_mutex_t mutex;void thread_func(void arg) {pthread_mutex_lock(&mutex); // 加锁printf("Thread %ld is running\n", (long)arg);sleep(1); // 模拟任务执行pthread_mutex_unlock(&mutex); // 解锁return NULL;}int main() {pthread_t thread1, thread2;// 初始化互斥锁pthread_mutex_init(&mutex, NULL);// 创建线程pthread_create(&thread1, NULL, thread_func, (void )1); pthread_create(&thread2, NULL, thread_func, (void )2); // 等待线程结束pthread_join(thread1, NULL);pthread_join(thread2, NULL);// 销毁互斥锁pthread_mutex_destroy(&mutex);return 0;}```3. 进程的通信```cinclude <stdio.h>include <stdlib.h>include <sys/ipc.h>include <sys/shm.h>int main() {key_t key;int shmid;int data;// 生成共享内存标识符key = ftok("shmfile", 65);// 创建共享内存段shmid = shmget(key, sizeof(int), 0666 | IPC_CREAT); if (shmid == -1) {perror("shmget failed");exit(1);}// 连接到共享内存段data = (int )shmat(shmid, (void )0, 0);if (data == (int )(-1)) {perror("shmat failed");exit(1);}// 使用共享内存data = 100;printf("Data in shared memory: %d\n", data); // 分离共享内存段if (shmdt(data) == -1) {perror("shmdt failed");exit(1);}// 删除共享内存段if (shmctl(shmid, IPC_RMID, NULL) == -1) { perror("shmctl failed");exit(1);}return 0;}```4. 进程调度算法```cinclude <stdio.h>include <stdlib.h>include <sys/time.h>typedef struct {int pid;int arrival_time;int burst_time;int waiting_time;int turnaround_time;} Process;int main() {Process processes[] = {{1, 0, 5, 0, 0},{2, 1, 3, 0, 0},{3, 4, 8, 0, 0}};int n = sizeof(processes) / sizeof(processes[0]);// 计算等待时间和周转时间int total_waiting_time = 0, total_turnaround_time = 0;for (int i = 0; i < n; i++) {if (i == 0) {processes[i].waiting_time = 0;} else {processes[i].waiting_time = processes[i - 1].turnaround_time;}processes[i].turnaround_time = processes[i].burst_time + processes[i].waiting_time;total_waiting_time += processes[i].waiting_time;total_turnaround_time += processes[i].turnaround_time;}printf("Average Waiting Time: %f\n", (float)total_waiting_time / n);printf("Average Turnaround Time: %f\n", (float)total_turnaround_time / n);return 0;}```五、实验结果与分析(此处应填写实验结果,包括运行程序输出、图表等,以及对实验结果的分析。
linux进程管理的实验报告
实验报告:Linux进程管理1. 引言本实验报告将详细介绍Linux系统中进程管理的相关知识和操作。
进程管理是操作系统中的一个重要组成部分,它负责控制和调度系统中运行的各个进程,确保系统资源的合理分配和进程的正常运行。
在本实验中,我们将通过一系列步骤来了解Linux系统中进程的创建、监控和控制。
2. 实验环境为了完成本实验,我们需要在一台运行Linux操作系统的计算机上进行操作。
本实验报告基于Ubuntu 20.04 LTS操作系统进行撰写,但是适用于大多数Linux 发行版。
3. 实验步骤步骤一:创建新进程在Linux系统中,可以通过fork()系统调用来创建新的进程。
以下是一个简单的示例代码:#include <stdio.h>#include <unistd.h>int main() {pid_t pid = fork();if (pid == 0) {// 子进程逻辑printf("这是子进程\n");} else if (pid > 0) {// 父进程逻辑printf("这是父进程\n");} else {// 进程创建失败printf("进程创建失败\n");}return0;}步骤二:查看进程信息Linux系统提供了多种命令来查看系统中运行的进程信息。
以下是一些常用的命令:•ps:显示当前终端下的进程列表。
•top:实时显示进程的CPU、内存等资源占用情况。
•pstree:以树状结构显示进程的层次关系。
步骤三:杀死进程有时候我们需要终止一个运行中的进程,可以使用kill命令来发送终止信号给目标进程。
以下是一个示例:kill <PID>请将<PID>替换为目标进程的进程ID。
步骤四:进程优先级调整通过调整进程的优先级,可以影响进程在系统中的调度顺序。
在Linux系统中,可以使用nice命令来调整进程的优先级。
Linux进程管理-实验报告
《Linux 操作系统设计实践》实验一:进程管理实验目的:(1)加深对进程概念的理解,明确进程和程序的区别.(2)进一步认识并发执行的实质。
(3) 学习通过进程执行新的目标程序的方法.(4)了解Linux 系统中进程信号处理的基本原理。
实验环境:Red Hat Linux实验内容:(1)进程的创建编写一段程序,使用系统调用fork()创建两个子进程,当此进程运行时,在系统中有一个父进程和两个子进程活动,让每一个进程在屏幕上显示一个字符,父进程显示字符“a”;子进程分别显示字符“b”和字符“c”,试观察记录屏幕上的显示结果,并分析原因。
程序代码:#include〈stdio。
h〉int main(){int p1 ,p2 ;while((p1=fork())==—1);if(p1==0)putchar(’b’);else{while((p2=fork())==-1);if(p2==0)putchar(’c’);elseputchar('a’);}return 0;}运行结果:bca分析:第一个while里调用fork() 函数一次,返回两次.子进程P1得到的返回值是0,父进程得到的返回值是新子进程的进程ID(正整数);接下来父进程和子进程P1两个分支运行,判断P1==0,子进程P1符合条件,输出“b”;接下来else里面的while里再调用fork()函数一次,子进程P2得到的返回值是0,父进程得到的返回值是新子进程的进程ID(正整数);接下来判断P2==0,子进程P2符合条件,输出“c”,接下来父进程输出“a”,程序结束.(2)进程的控制①修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕上出现的现象,并分析原因.程序代码:#include〈stdio。
h〉int main(){int p1,p2;while((p1=fork())==-1);if(p1==0)printf(”Child1 is running!\n”);else{while((p2=fork())==—1);if(p2==0)printf(”Child2 is running!\n");elseprintf("Father is running!\n");}return 0;}运行结果:Child1 is running!Child2 is running!Father is running!分析:本实验和上一个实验一样,只是将每个进程输出一个字符改为每个进程输出一句话。
计算机操作系统实验报告三Linux进程基本管理
GDOU-B-11-112广东海洋大学学生实验报告书(学生用表)实验名称 Linux进程基本管理课程名称计算机操作系统课程号学院(系) 专业统班级学生姓名学号实验地点实验日期实验三 Linux进程基本管理一、实验目的通过在Linux环境下对进程的基本操作,感性认识进程并区分与程序的区别。
二、实验工具一台至少具有256MB内存的计算机,以及具有Linux操作系统。
三、预备知识常见对进程进行控制的命令。
命令ps:报告进程的使用状况。
命令nice:设置进程优先级。
命令kill:删除指定进程。
命令pstree:以树状图显示程序。
以上命令的具体参数和使用方法参见本次实验参考资料部分。
四、基本实验1)ps报告程序状况步骤一:进入linux操作系统。
步骤二:打开终端。
步骤三:[root@localhost root]# ps -a后回车。
如屏所示。
其中:●USER表示进程的拥有者。
●%CPU表示CPU时间的占用比例。
●%MEN表示内存的占用比例。
●SIZE表示进程的大小。
●RSS表示常驻内存部分大小。
●START表示进程的启动时间。
●PID为进程的ID编号。
●TTY表示提交该进程的终端号。
●STAT表示该进程所处的状态。
●TIME表示进程运行的时间。
●COMMAND为进程所对应的命令。
2)nice设置程序的优先级步骤一:进入Linux操作系统。
步骤二:打开终端。
步骤三:[root@localhost root]# nice后表示当前的优先级。
[root@localhost root]# nice nice后当前的优先级+10,即0+10=10.[root@localhost root]# nice nice nice后当前的优先级+10后再+10,即0+10+10=20但是Linux中优先级的范围是从-10~19,20已经超过了19,所以,就为19。
结果如屏所示。
3)ptree以树状图显示进程(程序)步骤一:进入Linux操作系统。
进程管理设计实验报告
一、实验目的1. 理解进程管理的概念和作用;2. 掌握进程的创建、调度、同步与通信等基本操作;3. 分析并解决进程管理中的常见问题;4. 提高编程能力和系统设计能力。
二、实验环境1. 操作系统:Linux;2. 编程语言:C/C++;3. 开发工具:GCC。
三、实验内容1. 进程创建与调度(1)创建一个简单的进程,实现进程的创建、运行和退出;(2)实现进程的调度,采用时间片轮转算法(RR)进行进程调度;(3)分析进程调度的过程,观察不同调度算法对进程执行的影响。
2. 进程同步与互斥(1)实现进程同步,采用信号量机制实现进程间的同步;(2)实现进程互斥,使用互斥锁(mutex)保护临界资源;(3)分析进程同步与互斥的原理,解决死锁、饥饿等问题。
3. 进程通信(1)实现进程间的通信,采用管道(pipe)进行数据传输;(2)实现共享内存(shared memory)进行进程间通信;(3)分析进程通信的原理,解决通信中的同步与互斥问题。
4. 实验拓展(1)设计一个多进程并发程序,实现生产者-消费者问题;(2)实现进程的优先级调度,观察不同优先级对进程执行的影响;(3)分析并实现进程的动态创建与销毁,提高系统的灵活性和可扩展性。
四、实验步骤1. 编写进程创建与调度的代码,实现进程的创建、调度和执行;2. 编写进程同步与互斥的代码,实现信号量机制和互斥锁;3. 编写进程通信的代码,实现管道和共享内存通信;4. 编写实验拓展的代码,实现生产者-消费者问题、优先级调度和动态创建与销毁;5. 编译并运行实验程序,观察实验结果,分析并解决问题。
五、实验结果与分析1. 进程创建与调度实验结果显示,采用时间片轮转算法(RR)进行进程调度,进程按照一定的顺序执行,实现了进程的并发执行。
2. 进程同步与互斥实验结果显示,采用信号量机制实现进程同步,可以避免进程间的冲突,保证进程按预期顺序执行;使用互斥锁(mutex)保护临界资源,可以防止多个进程同时访问同一资源,避免数据竞争。
进程管理实验报告分析(3篇)
第1篇一、实验背景进程管理是操作系统中的一个重要组成部分,它负责管理计算机系统中所有进程的创建、调度、同步、通信和终止等操作。
为了加深对进程管理的理解,我们进行了一系列实验,以下是对实验的分析和总结。
二、实验目的1. 加深对进程概念的理解,明确进程和程序的区别。
2. 进一步认识并发执行的实质。
3. 分析进程争用资源的现象,学习解决进程互斥的方法。
4. 了解Linux系统中进程通信的基本原理。
三、实验内容1. 使用系统调用fork()创建两个子进程,父进程和子进程分别显示不同的字符。
2. 修改程序,使每个进程循环显示一句话。
3. 使用signal()捕捉键盘中断信号,并通过kill()向子进程发送信号,实现进程的终止。
4. 分析利用软中断通信实现进程同步的机理。
四、实验结果与分析1. 实验一:父进程和子进程分别显示不同的字符在实验一中,我们使用fork()创建了一个父进程和两个子进程。
在父进程中,我们打印了字符'a',而在两个子进程中,我们分别打印了字符'b'和字符'c'。
实验结果显示,父进程和子进程的打印顺序是不确定的,这是因为进程的并发执行。
2. 实验二:每个进程循环显示一句话在实验二中,我们修改了程序,使每个进程循环显示一句话。
实验结果显示,父进程和子进程的打印顺序仍然是随机的。
这是因为并发执行的进程可能会同时占用CPU,导致打印顺序的不确定性。
3. 实验三:使用signal()捕捉键盘中断信号,并通过kill()向子进程发送信号在实验三中,我们使用signal()捕捉键盘中断信号(按c键),然后通过kill()向两个子进程发送信号,实现进程的终止。
实验结果显示,当按下c键时,两个子进程被终止,而父进程继续执行。
这表明signal()和kill()在进程控制方面具有重要作用。
4. 实验四:分析利用软中断通信实现进程同步的机理在实验四中,我们分析了利用软中断通信实现进程同步的机理。
linux的进程管理实验总结
linux的进程管理实验总结Linux的进程管理实验总结1. 引言Linux中的进程管理是操作系统的核心功能之一,在实际的系统运行中起着重要的作用。
进程管理能够有效地分配系统资源、管理进程的运行状态和优先级,以及监控进程的行为。
本文将以Linux的进程管理实验为主题,分步骤介绍实验过程及总结。
2. 实验目的本次实验的目的是理解Linux中进程的概念,掌握进程的创建、运行和终止的基本操作,以及进程的状态转换过程。
3. 实验环境本次实验使用的是Linux操作系统,可以选择使用虚拟机安装Linux或者使用Linux主机进行实验。
4. 实验步骤4.1 进程的创建在Linux中,可以使用系统调用fork()来创建一个新的子进程。
在实验中,可以编写一个简单的C程序来调用fork()系统调用,实现进程的创建。
具体步骤如下:(1)创建一个新的C程序文件,例如"process_create.c"。
(2)在C程序文件中,包含必要的头文件,如<stdio.h>和<unistd.h>。
(3)在C程序文件中,编写main()函数,调用fork()函数进行进程的创建。
(4)编译并运行该C程序文件,观察控制台输出结果。
实验中,可以通过观察控制台输出结果,判断新的子进程是否被成功创建。
4.2 进程的运行在Linux中,通过调用系统调用exec()可以用一个新的程序替换当前进程的执行。
可以使用exec()函数来实现进程的运行。
具体步骤如下:(1)创建一个新的C程序文件,例如"process_run.c"。
(2)在C程序文件中,包含必要的头文件和函数声明,如<stdio.h>和<unistd.h>。
(3)在C程序文件中,编写main()函数,调用execl()函数来执行一个可执行程序。
(4)编译并运行该C程序文件,观察控制台输出结果。
实验中,可以通过观察控制台输出结果,判断新的程序是否被成功执行。
实验报告5Linux进程管理
实验报告5Linux进程管理实验五 Linux进程管理四、实验过程(实验步骤、记录、数据、分析、结果)(⼀)进程查看、终⽌、挂起及暂停等操作1、使⽤ps命令查看和控制进程1)显⽰本⽤户进程#ps2)显⽰所有⽤户的进程#ps–au3)在后台运⾏cat命令#cat&4)查看进程cat#ps aux |grep cat5)杀死进程cat#kill -9 cat6)再次查看进程cat,看看是否被杀死。
2、使⽤top命令查看和控制进程1)⽤top命令动态显⽰当前的进程。
2)只显⽰某⼀⽤户的进程(u)3)杀死指定进程号的进程(k)3、挂起和恢复进程1)执⾏命令cat2)按【ctrl+z】挂起进程3)输⼊jobs命令,查看作业4)输⼊bg,把cat切换到后台执⾏5)输⼊fg,把cat切换到前台执⾏6)按【ctrl+c】结束进程(⼆)通过at命令实现计划任务1、5分钟后执⾏/bin/date#at now+5minutesat>/bin/dateat>(提⽰:输⼊【ctrl+d】job任务号at 年-⽉-⽇⼩时:分钟如何查看结果?使⽤atq可以查询到已添加的at计划任务2、查找系统中任何以c为后缀名的⽂档,将结果保存到$HOME/findc⽂件中,指定时间为2016年12⽉01⽇早上8点#at 8am 12/01/16at>find / -name ‘*.c’>$HOME/findcat>job任务号at 年-⽉-⽇⼩时:分钟如何查看结果?使⽤atq可以查询到已添加的at计划任务3、2题的命令写到$HOME/findjob中,使⽤at命令执⾏,并将结果保存到$HOME/findfc⽂件中,指定时间为当前时间后5分钟#vi $HOME/findjob内容如下:find / -name ‘*.c’>$HOME/findfc存盘退出#at –f $HOME/findjob now+5minutes4、at命令实现在3天后统计/etc/inittab⽂件的⾏数,将统计结果发送⾄$HOME/initline⽂件中#at now+3daysat>wc–l /etc/inittab>>$HOME/initlineat>5.列出现有的所有at任务,并记下相关信息6、删除某at任务,并进⾏查看是否删除(三)通过cron命令实现计划任务1、使⽤cron命令实现12⽉每天下午2点系统进⾏维护状态,重新启动系统#vi $HOME/shutcron输⼊内容:00 14 * 12 * /sbin/shutdown–r存盘退出#crontab $HOME/shutcron2、使⽤cron命令实现在12⽉1号星期四的17点30分查看/etc/passwd内容,并将查看结果送⾄$HOME/passtext #vi $HOME/checkcron输⼊内容:30 17 1 12 4 more /etc/passwd>$HOME/passtext存盘退出#crontab $HOME/checkcron3、查看当前的crontab⽂件#crontab -l4、⽤户user的crontab⽂件#crontab –u user –r。
操作系统实验报告----进程管理
实验内容:进程管理一、实验目的1、掌握Linux中进程的创建方法及执行情况;2、加深对进程、进程树等概念的理解;3、掌握Linux中如何加载子进程自己的程序;4、掌握父进程通过创建子进程完成某项任务的方法;5.、掌握系统调用exit()和_exit()调用的使用。
6、分析进程竞争资源的现象,学习解决进程互斥的方法;进一步认识并发执行的实质二、实验内容(一)进程的创建1、编写一段程序,使用系统调用fork( )创建两个子进程。
当此程序运行时,在系统中有一个父进程和两个子进程活动。
让每一个进程在屏幕上显示一个字符。
#include<stdio.h>main(){int p,x;p=fork();if(p>0){x=fork();if(x>0)printf("father\n");elseprintf("child2");}elseprintf("child1");}输出结果:child1child2father2、运行以下程序,分析程序执行过程中产生的进程情况。
#include <stdio.h>main(){int p,x;p=fork();if (p>0)fork();else{fork();fork();}sleep(15);}实验步骤:编译连接gcc –o forktree forktree.c后台运行./forktree &使用pstree –h 查看进程树运行结果:├─gnom e-terminal─┬─bash─┬─forktree─┬─forktree─┬─forkt ree───forktree││││└─forktree│││└─forktree││└─pstree 分析:程序运行,系统首先创建一个进程forktree,执行到p=fork()创建一个子进程forktree,子进程获得处理机优先执行,父进程等待;执行else,当执行到第一个fork()函数时,子进程创建了一个进程forktree,称之为孙进程,孙进程获得处理机往下执行,子进程等待;执行到第二个fork()函数时,孙进程又创建一个进程forktree,称之为重孙进程,重孙进程很快执行完,将处理机还给孙进程,孙进程很快执行完,将处理机还给子进程;子进程继续往下执行,执行到第二个fork()函数,又创建一个进程forktree,称之为第二孙进程,并获得处理机执行,此进程很快执行完,将处理机还给子进程,子进程也很快执行完,将处理机还给父进程,父进程P>0执行if语句,运行fork()函数,又创建一个进程forktree,称之为第二子进程,此进程获得处理机执行很快运行完,将处理机还给父进程,父进程运行sleep(15)语句,休眠15秒,用pstree命令查询进程树。
linux进程线程管理实验报告
linux进程线程管理实验报告————————————————————————————————作者:————————————————————————————————日期:西安郵電學院操作系统LINUX实验报告题目1:进程______题目2:线程管理__题目3:互斥_____系部名称:计算机学院专业名称:软件工程班级:0802学号:04085048学生姓名:郭爽乐时间:2010-10-31实验一: 进程管理一.实验目的通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在POSIX 规范中fork和kill系统调用的功能和使用。
二.实验要求2.1 实验环境要求1. 硬件(1) 主机:Pentium III 以上;(2) 内存:128MB 以上;(3) 显示器:VGA 或更高;(4) 硬盘空间:至少100MB 以上剩余空间。
2. 软件Linux 操作系统,内核2.4.26 以上,预装有X-Window 、vi、gcc、gdb 和任意web 浏览器。
2.2 实验前的准备工作学习man 命令的用法,通过它查看fork 和kill 系统调用的在线帮助,并阅读参考资料,学会fork 与kill 的用法。
复习C 语言的相关内容。
三、实验内容3.1 补充POSIX 下进程控制的残缺版实验程序3.2回答下列问题:1. 你最初认为运行结果会怎么样?2. 实际的结果什么样?有什么特点?试对产生该现象的原因进行分析。
3. proc_number 这个全局变量在各个子进程里的值相同吗?为什么?4. kill 命令在程序中使用了几次?每次的作用是什么?执行后的现象是什么?5. 使用kill 命令可以在进程的外部杀死进程。
进程怎样能主动退出?这两种退出方式哪种更好一些?四、实验结果4.1 补充完全的源程序#include<stdio.h>#include<sys/types.h>#include<unistd.h>#include<signal.h>#include<ctype.h>#define MAX_CHILD_NUMBER 10/* 允许建立的子进程个数最大值 */ #define SLEEP_INTERV AL 1/* 子进程睡眠时间 */int proc_number=0; /* 子进程的编号,从0开始 */void do_something();main(int argc,char *argv[]){int child_proc_number=MAX_CHILD_NUMBER; /* 子进程个数 */ int i,ch;pid_t child_pid;pid_t pid[10]={0};/* 存放每个子进程的id */if(argc>1){child_proc_number=atoi(argv[1]);child_proc_number=(child_proc_number>10)?10:child_proc_number; /* 命令行参数中的第一个参数表示建立几个子进程,最多10个 */ }/*建立child_proc_number个子进程* 子进程要执行* proc_number = i;* do_something();* 父进程把子进程的id保存到pid[i] */for(i=0;i<child_proc_number;i++){child_pid=fork();if(child_pid== -1){perror("creat error!\n");return 1;}else if(child_pid>0)pid[i]=child_pid;else{proc_number=i;do_something();}}/* 让用户选择杀死哪个进程。
Linux的进程管理实验报告
实验报告Linux进程管理实验内容:1,进程运行控制命令2,进程管理命令3,调度进程命令4,信息管理命令姓名:学好:520913080429专业:信息安全09-041,进程运行控制命令[root@localhost ~]# find / -name testing & <==将该执行程序放在后台执行[1] 5673You have new mail in /var/spool/mail/root[root@localhost ~]# fg <=将该程序教会屏幕前执行find / -name testing[1]+ Stopped find / -name testing[root@localhost ~]#[root@localhost /]# vi .bashrc[2]+ Stopped vi .bashrc <=两个进程被丢到后台当中[root@localhost /]#[root@localhost /]# jobs[1]- Stopped find / -name testing (wd: ~)[2]+ Stopped vi .bashrc[root@localhost /]# <=显示有两个工作在后台下,状态为停止[root@localhost /]# find / -name test/usr/lib/ruby/1.8/test/usr/lib/python2.4/email/test/usr/lib/python2.4/test/usr/lib/python2.4/bsddb/test/usr/lib/pgsql/test/usr/bin/test/usr/include/boost/mpl/aux_/test/usr/include/boost/test/usr/share/pear/test/usr/share/doc/db4-devel-4.3.29/ref/test/usr/share/doc/lynx-2.8.5/test/usr/share/doc/ncurses-devel-5.5/test[3]+ Stopped find / -name test[root@localhost /]#[root@localhost /]# vi .bashrc[4]+ Stopped vi .bashrc[root@localhost /]#[root@localhost /]# jobs[1] Stopped find / -name testing (wd: ~)[2] Stopped vi .bashrc[3]- Stopped find / -name test[4]+ Stopped vi .bashrc[root@localhost /]#[root@localhost /]# bg %1[1] find / -name testing & (wd: ~)[root@localhost /]# /usr/share/doc/kernel-doc-2.6.18/Documentation/ABI/testing [root@localhost /]#[root@localhost /]# jobs[1] Running find / -name testing & (wd: ~)[2] Stopped vi .bashrc[3]- Stopped find / -name test[4]+ Stopped vi .bashrc[root@localhost /]# /work/mini2440/linux-2.6.32.2-mini2440/Documentation/ABI/testing[root@localhost /]#[root@localhost /]# bg %2[2] vi .bashrc &[root@localhost /]# jobs[1] Running find / -name testing & (wd: ~)[2]+ Stopped vi .bashrc[3] Stopped find / -name test[4]- Stopped vi .bashrc2,进程管理命令[root@localhost ~]# ps -auxWarning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.0 2044 636 ? Ss 12:05 0:01 init [5]root 2 0.0 0.0 0 0 ? S 12:05 0:00 [migration/0]root 3 0.0 0.0 0 0 ? SN 12:05 0:00 [ksoftirqd/0]root 4 0.0 0.0 0 0 ? S 12:05 0:00 [watchdog/0]root 5 0.0 0.0 0 0 ? S< 12:05 0:00 [events/0]root 6 0.0 0.0 0 0 ? S< 12:05 0:00 [khelper]root 7 0.0 0.0 0 0 ? S< 12:05 0:00 [kthread]root 9 0.0 0.0 0 0 ? S< 12:05 0:00 [xenwatch]root 10 0.0 0.0 0 0 ? S< 12:05 0:00 [xenbus]root 12 0.0 0.0 0 0 ? S< 12:05 0:00 [kblockd/0]root 13 0.0 0.0 0 0 ? S< 12:05 0:00 [kacpid]root 177 0.0 0.0 0 0 ? S< 12:05 0:00 [cqueue/0]root 181 0.0 0.0 0 0 ? S< 12:05 0:00 [khubd]root 183 0.0 0.0 0 0 ? S< 12:05 0:00 [kseriod]root 238 0.0 0.0 0 0 ? S 12:05 0:00 [pdflush]root 239 0.0 0.0 0 0 ? S 12:05 0:00 [pdflush]root 240 0.0 0.0 0 0 ? S< 12:05 0:00 [kswapd0]root 241 0.0 0.0 0 0 ? S< 12:05 0:00 [aio/0]root 445 0.0 0.0 0 0 ? S< 12:05 0:00 [kpsmoused]root 475 0.0 0.0 0 0 ? S< 12:05 0:00 [scsi_eh_0]root 480 0.0 0.0 0 0 ? S< 12:05 0:00 [kmirrord]root 485 0.0 0.0 0 0 ? S< 12:05 0:00 [ksnapd]root 488 0.0 0.0 0 0 ? S< 12:06 0:01 [kjournald]root 516 0.0 0.0 0 0 ? S< 12:06 0:00 [kauditd]root 550 0.0 0.0 2388 816 ? S<s 12:06 0:01 /sbin/udevd -droot 1271 0.0 0.0 0 0 ? S< 12:06 0:00 [kgameportd]root 2162 0.0 0.0 0 0 ? S< 12:07 0:00 [kjournald]root 2652 0.0 0.2 5276 2584 ? S 12:07 0:01 /usr/sbin/vmtoolsdroot 2704 0.0 0.2 9840 2088 ? Ss 12:07 0:00 cupsdroot 3164 0.0 0.0 12060 636 ? S<sl 12:08 0:00 auditdroot 3166 0.0 0.3 9504 3712 ? S<s 12:08 0:00 python /sbin/audispdroot 3180 0.0 0.0 1704 584 ? Ss 12:08 0:00 syslogd -m 0root 3183 0.0 0.0 1656 404 ? Ss 12:08 0:00 klogd -xrpc 3216 0.0 0.0 1784 548 ? Ss 12:08 0:00 portmaproot 3245 0.0 0.0 1800 732 ? Ss 12:08 0:00 rpc.statdroot 3278 0.0 0.0 4952 568 ? Ss 12:08 0:00 rpc.idmapddbus 3297 0.0 0.1 2852 964 ? Ss 12:08 0:00 dbus-daemon --systemroot 3308 0.0 0.0 2128 756 ? Ss 12:08 0:00 /usr/sbin/hcidroot 3312 0.0 0.0 1724 496 ? Ss 12:08 0:00 /usr/sbin/sdpdroot 3337 0.0 0.0 0 0 ? S< 12:08 0:00 [krfcommd]root 3376 0.0 0.1 33192 1284 ? Ssl 12:08 0:00 pcscdroot 3395 0.0 0.0 1896 444 ? Ss 12:08 0:00 /usr/bin/hidd --serverroot 3415 0.0 0.1 9344 1108 ? Ssl 12:08 0:00 automountroot 3434 0.0 0.0 1656 524 ? Ss 12:08 0:00 /usr/sbin/acpidroot 3445 0.0 0.0 5088 496 ? Ss 12:08 0:00 ./hpiodroot 3450 0.0 0.4 13172 4548 ? S 12:08 0:00 python ./hpssd.pyroot 3465 0.0 0.0 5184 924 ? Ss 12:08 0:00 /usr/sbin/sshdroot 3477 0.0 0.0 2680 884 ? Ss 12:08 0:00 xinetd -stayalive -pidfile /var/root 3497 0.0 0.1 8500 1804 ? Ss 12:08 0:00 sendmail: accepting connections smmsp 3505 0.0 0.1 7564 1448 ? Ss 12:08 0:00 sendmail: Queue runner@01:00:00 root 3518 0.0 0.0 1876 352 ? Ss 12:08 0:00 gpm -m /dev/input/mice -t exps2 root 3529 0.0 0.1 5476 1112 ? Ss 12:08 0:00 crondxfs 3564 0.0 0.1 3940 1780 ? Ss 12:08 0:00 xfs -droppriv -daemonroot 3575 0.0 0.0 1652 504 ? SNs 12:08 0:00 anacron -sroot 3585 0.0 0.0 2216 436 ? Ss 12:08 0:00 /usr/sbin/atdroot 3624 0.5 1.2 25456 12156 ? S 12:08 0:14 /usr/bin/python /usr/sbin/yum-up avahi 3650 0.0 0.1 2684 1364 ? Ss 12:09 0:01 avahi-daemon: running [localhost avahi 3651 0.0 0.0 2552 316 ? Ss 12:09 0:00 avahi-daemon: chroot helper68 3663 0.1 0.4 6236 4308 ? Ss 12:09 0:03 haldroot 3664 0.0 0.1 3112 964 ? S 12:09 0:00 hald-runner68 3670 0.0 0.0 1980 788 ? S 12:09 0:00 hald-addon-acpi: listening on ac68 3677 0.0 0.0 1976 788 ? S 12:09 0:00 hald-addon-keyboard: listening o root 3688 0.0 0.0 1936 616 ? S 12:09 0:00 hald-addon-storage: polling /dev root 3955 0.0 0.0 2100 932 ? S 12:09 0:00 xenstored --pid-file /var/run/xeroot 3961 0.0 0.0 12152 420 ? Sl 12:09 0:00 xenconsoledroot 3963 0.0 0.4 11844 3940 ? S 12:09 0:00 python /usr/sbin/xend startroot 3964 0.0 0.5 63064 4924 ? Sl 12:09 0:00 python /usr/sbin/xend startroot 3965 0.0 0.0 13496 600 ? Ssl 12:09 0:00 blktapctrlroot 4344 0.0 0.0 2292 708 ? Ss 12:09 0:00 /sbin/dhclient -1 -q -lf /var/liroot 4466 0.0 0.0 1912 336 ? S 12:09 0:00 /usr/sbin/smartd -q neverroot 4478 0.0 0.0 1640 432 tty1 Ss+ 12:09 0:00 /sbin/mingetty tty1root 4480 0.0 0.0 1640 428 tty2 Ss+ 12:09 0:00 /sbin/mingetty tty2root 4481 0.0 0.0 1636 428 tty3 Ss+ 12:09 0:00 /sbin/mingetty tty3root 4482 0.0 0.0 1640 432 tty4 Ss+ 12:09 0:00 /sbin/mingetty tty4root 4483 0.0 0.0 1640 432 tty5 Ss+ 12:09 0:00 /sbin/mingetty tty5root 4509 0.0 0.0 1636 428 tty6 Ss+ 12:09 0:00 /sbin/mingetty tty6root 4510 0.0 0.4 16964 4248 ? Ss 12:09 0:00 /usr/sbin/gdm-binary -nodaemon root 4585 0.0 0.2 15988 2652 ? S 12:09 0:00 /usr/sbin/gdm-binary -nodaemon root 4589 0.0 0.1 16964 1508 ? S 12:09 0:00 /usr/sbin/gdm-binary -nodaemon root 4591 0.3 1.3 19960 12916 tty7 Ss+ 12:09 0:08 /usr/bin/Xorg :0 -br -audit 0 -aroot 4799 0.0 0.6 23060 6000 ? Ss 12:15 0:00 /usr/bin/gnome-sessionroot 4828 0.0 0.0 0 0 ? Z 12:15 0:00 [Xsession] <defunct>root 4861 0.0 0.0 4308 508 ? Ss 12:15 0:00 /usr/bin/ssh-agent /usr/bin/dbus root 4864 0.0 0.0 2756 504 ? S 12:15 0:00 /usr/bin/dbus-launch --exit-with root 4865 0.0 0.0 2720 848 ? Ss 12:15 0:00 /bin/dbus-daemon --fork --print- root 4871 0.0 0.3 7348 3416 ? S 12:15 0:00 /usr/libexec/gconfd-2 5root 4875 0.0 0.0 2552 588 ? S 12:15 0:00 /usr/bin/gnome-keyring-daemon root 4877 0.0 0.8 34028 8044 ? Sl 12:15 0:00 /usr/libexec/gnome-settings-daem root 4894 0.0 1.1 25160 11280 ? Ss 12:15 0:00 /usr/lib/scim-1.0/scim-launcherroot 4907 0.0 1.1 39776 11528 ? Ss 12:15 0:00 metacity --sm-client-id=default1root 4912 0.0 1.4 98520 14212 ? Ss 12:15 0:02 gnome-panel --sm-client-id defau root 4914 0.3 1.8 136400 18176 ? Ss 12:15 0:07 nautilus --no-default-window --sroot 4918 0.0 0.3 38896 2948 ? Ssl 12:15 0:00 /usr/libexec/bonobo-activation-s root 4922 0.0 0.3 11360 3092 ? S 12:15 0:00 /usr/libexec/gnome-vfs-daemon root 4926 0.0 0.8 44884 8096 ? Ss 12:15 0:00 eggcups --sm-client-id default4root 4938 0.3 1.9 77512 18920 ? S 12:15 0:08 /usr/lib/vmware-tools/bin32/vmwa root 4941 0.0 0.0 6452 576 ? Ss 12:15 0:00 /usr/lib/scim-1.0/scim-helper-ma root 4942 0.0 0.6 49540 6596 ? Ssl 12:15 0:00 /usr/lib/scim-1.0/scim-panel-gtk root 4946 0.0 0.5 14584 4996 ? Ss 12:15 0:00 bt-applet --sm-disableroot 4948 0.0 0.0 13548 816 ? Ss 12:15 0:00 /usr/lib/scim-1.0/scim-launcher root 4952 0.1 1.3 25236 13336 ? Ss 12:15 0:04 /usr/bin/python -tt /usr/bin/pup root 4960 0.0 0.1 2536 1196 ? S 12:16 0:00 /usr/libexec/gam_serverroot 4962 0.0 1.3 97264 12776 ? S 12:16 0:00 /usr/libexec/wnck-applet --oaf-a root 4964 0.0 0.9 104952 8800 ? S 12:16 0:00 /usr/libexec/trashapplet --oaf-aroot 4980 0.0 0.2 17280 2212 ? Sl 12:16 0:00 ./escd --key_Inserted="/usr/bin/ root 4983 0.1 0.9 74352 9260 ? Ss 12:16 0:02 nm-applet --sm-disableroot 4985 0.0 0.0 2452 828 ? S 12:16 0:00 /usr/libexec/mapping-daemonroot 4992 0.0 0.4 15396 4608 ? Ss 12:16 0:01 pam-panel-icon --sm-client-id de root 4995 0.0 0.6 74052 6320 ? Ss 12:16 0:00 gnome-power-managerroot 4996 0.0 0.0 1820 620 ? S 12:16 0:00 /sbin/pam_timestamp_check -d roo root 5017 0.0 0.4 16404 4068 ? Ss 12:16 0:00 gnome-screensaverroot 5029 0.6 2.6 64052 25252 ? S 12:16 0:14 /usr/bin/python -E /usr/bin/seal root 5046 0.0 0.6 23148 6532 ? S 12:16 0:01 /usr/libexec/notification-area-a root 5049 0.1 1.3 97332 12944 ? S 12:17 0:02 /usr/libexec/mixer_applet2 --oaf root 5052 0.1 1.2 48824 11612 ? S 12:17 0:02 /usr/libexec/clock-applet --oaf-root 5061 0.0 0.1 12292 1000 ? S 12:17 0:00 scim-bridgeroot 5437 0.0 1.7 131360 17252 ? Sl 12:28 0:00 gnome-terminalroot 5442 0.0 0.0 2452 660 ? S 12:28 0:00 gnome-pty-helperroot 5443 0.0 0.1 5052 1516 pts/1 Ss 12:28 0:00 bashroot 5933 0.0 0.1 5004 1248 pts/1 T 12:44 0:00 vi .bashrcroot 6062 0.0 0.1 4800 1108 pts/1 T 12:48 0:00 find / -name testroot 6159 0.0 0.1 5028 1308 pts/1 T 12:50 0:00 vi .bashrcroot 6271 0.0 0.0 4476 952 pts/1 R+ 12:54 0:00 ps -aux[root@localhost ~]#USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDUSER :进程属于那个人的PID :进程号%CPU :使用了多少CPU资源%MEM :使用了多少RAMVSZ RSS :占用的Ram的大小TTY :若为tty1-tty6则为本机用户,STAT :该进程的状态START :该进程开始的日期TIME :该进程运行了多久的时间COMMAND :该进程的内容[root@localhost ~]# toptop - 13:06:05 up 1:00, 1 user, load average: 0.00, 0.01, 0.08Tasks: 123 total, 2 running, 117 sleeping, 3 stopped, 1 zombieCpu(s): 0.7%us, 0.7%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%stMem: 962500k total, 826544k used, 135956k free, 215324k buffers Swap: 2031608k total, 0k used, 2031608k free, 411772k cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND4591 root 15 0 38392 12m 5316 S 1.3 1.3 0:09.46 Xorg5437 root 15 0 128m 17m 10m R 0.3 1.8 0:00.75 gnome-terminal1 root 15 0 2044 636 540 S 0.0 0.1 0:01.04 init2 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/03 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/04 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/05 root 10 -5 0 0 0 S 0.0 0.0 0:00.12 events/06 root 20 -5 0 0 0 S 0.0 0.0 0:00.02 khelper7 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthread9 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 xenwatch10 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 xenbus12 root 10 -5 0 0 0 S 0.0 0.0 0:00.42 kblockd/013 root 20 -5 0 0 0 S 0.0 0.0 0:00.00 kacpid177 root 18 -5 0 0 0 S 0.0 0.0 0:00.00 cqueue/0181 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 khubd183 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kseriod238 root 23 0 0 0 0 S 0.0 0.0 0:00.00 pdflush239 root 15 0 0 0 0 S 0.0 0.0 0:00.51 pdflush240 root 18 -5 0 0 0 S 0.0 0.0 0:00.00 kswapd0241 root 18 -5 0 0 0 S 0.0 0.0 0:00.00 aio/0445 root 11 -5 0 0 0 S 0.0 0.0 0:00.00 kpsmoused 475 root 18 -5 0 0 0 S 0.0 0.0 0:00.00 scsi_eh_0480 root 19 -5 0 0 0 S 0.0 0.0 0:00.00 kmirrord485 root 20 -5 0 0 0 S 0.0 0.0 0:00.00 ksnapd488 root 10 -5 0 0 0 S 0.0 0.0 0:01.28 kjournald516 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kauditd550 root 17 -4 2388 816 372 S 0.0 0.1 0:01.48 udevd1271 root 17 -5 0 0 0 S 0.0 0.0 0:00.00 kgameportd 2162 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kjournald 2652 root 15 0 5276 2584 2152 S 0.0 0.3 0:01.59 vmtoolsdYou have new mail in /var/spool/mail/rootTop为动态进程查看cpu使用的情况[root@localhost ~]# sar -u 1 3Linux 2.6.18-8.el5xen (localhost.localdomain) 2011年11月07日13时09分33秒CPU %user %nice %system %iowait %steal %idle13时09分34秒all 1.00 0.00 1.00 0.00 0.00 98.0013时09分35秒all 3.96 0.00 0.00 0.000.00 96.0413时09分36秒all 0.00 0.00 1.00 0.00 0.00 99.00Average: all 1.66 0.00 0.66 0.00 0.00 97.67[root@localhost ~]#查看内存的使用情况[root@localhost ~]# sar -r 1 3Linux 2.6.18-8.el5xen (localhost.localdomain) 2011年11月07日13时10分44秒kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad13时10分45秒134656 827844 86.01 215596 411924 2031608 0 0.00 013时10分46秒134656 827844 86.01 215596 411924 2031608 0 0.00 013时10分47秒134656 827844 86.01 215596 411924 2031608 0 0.00 0Average: 134656 827844 86.01 215596 411924 2031608 0 0.00 0You have new mail in /var/spool/mail/root[root@localhost ~]#关闭进程PID为2652的进程[root@localhost ~]# kill -9 2652[root@localhost ~]#查看系统的内核版本,主机名称,cpu信息[root@localhost ~]# uname -aLinux localhost.localdomain 2.6.18-8.el5xen #1 SMP Fri Jan 26 14:42:21 EST 2007 i686 i686 i386 GNU/LinuxYou have new mail in /var/spool/mail/root[root@localhost ~]#了解cpu的详细信息[root@localhost ~]# more /proc/cpuinfoprocessor : 0vendor_id : GenuineIntelcpu family : 6model : 23model name : Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz stepping : 10cpu MHz : 2925.552cache size : 3072 KBfdiv_bug : nohlt_bug : nof00f_bug : nocoma_bug : nofpu : yesfpu_exception : yescpuid level : 13wp : yesflags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsrsse sse2 ss nx lm constant_tsc up pni cx16 lahf_lmbogomips : 7338.60[root@localhost ~]#查看进程的优先级[root@localhost ~]# ps -lF S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD0 S 0 5443 5437 0 75 0 - 1263 wait pts/1 00:00:00 bash0 T 0 5933 5443 0 75 0 - 1251 finish pts/1 00:00:00 vi0 T 0 6062 5443 0 77 0 - 1200 finish pts/1 00:00:00 find0 T 0 6159 5443 0 78 0 - 1257 finish pts/1 00:00:00 vi4 R 0 7163 5443 0 77 0 - 1107 - pts/1 00:00:00 ps 3,调度进程命令[root@localhost ~]#[root@localhost ~]# at 5pmat> shutdown -h -nowat> You have new mail in /var/spool/mail/root[root@localhost ~]# atq[root@localhost ~]# at 5pm shutdown -h -nowUsage: at [-V] [-q x] [-f file] [-m] timeat [-V] [-q x] [-f file] [-m] -t [[CC]YY]MMDDhhmmat -c job [job...](atq | at -l) [-V] [-q x](atrm | at -d | at -r) [-V] [-q x] job ...batch [-V] [-f file] [-m][root@localhost ~]# at -qat: option requires an argument -- qUsage: at [-V] [-q x] [-f file] [-m] timeat [-V] [-q x] [-f file] [-m] -t [[CC]YY]MMDDhhmmat -c job [job...](atq | at -l) [-V] [-q x](atrm | at -d | at -r) [-V] [-q x] job ...batch [-V] [-f file] [-m][root@localhost ~]#[root@localhost ~]#[root@localhost ~]# crontab –e[root@localhost ~]# at 6pmat> sar -u 1 3at> <EOT>job 1 at 2011-11-10 18:00[root@localhost ~]#[root@localhost ~]# atq1 2011-11-10 18:00 a root 一个任务[root@localhost ~]#0 12 * * *mail test </home/test/test.txt[root@localhost ~]# crontab –r 删除所有[root@localhost ~]#crontab –l[root@localhost ~]# atq[root@localhost ~]# vi /etc/crontab 启动iv编辑器SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# run-parts01 * * * * root run-parts /etc/cron.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * 0 root run-parts /etc/cron.weekly42 4 1 * * root run-parts /etc/cron.monthly4,信息管理命令[root@localhost ~]# dmesg 显示开机信息[root@localhost ~]#dmesg | more[root@localhost ~]#uptime 查看系统开机时间[root@localhost ~]# uptime08:52:55 up 16 min, 1 user, load average: 0.02, 0.51, 0.55 [root@localhost ~]#whoroot pts/1 2011-11-10 08:49 (:0.0)[root@localhost ~]#[root@localhost ~]# whoamiroot[root@localhost ~]# [root@localhost ~]#last -5。
Linux进程和计划任务管理实验报告
[root@localhost ~]# ps 显示当前用户会话中打开的进程PID TTY TIME CMD4321 pts/1 00:00:00 bash4420 pts/1 00:00:00 ps[root@localhost ~]# ps aux 以简单列表的形式显示出所有进程信息USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.1 2072 664 ? Ss 15:43 0:00 init [5]root 2 0.0 0.0 0 0 ? S< 15:43 0:00 [migration/0]root 3 0.0 0.0 0 0 ? SN 15:43 0:00 [ksoftirqd/0]root 4 0.0 0.0 0 0 ? S< 15:43 0:00 [watchdog/0]root 5 0.0 0.0 0 0 ? S< 15:43 0:00 [events/0][root@localhost ~]# ps -elf 以长格式显示系统中所有的进程信息F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD4 S root 1 0 0 75 0 - 518 - 15:43 ? 00:00:00 init1 S root2 1 0 -40 - - 0 migrat 15:43 ? 00:00:00 [mig]1 S root 3 1 0 94 19 - 0 ksofti 15:43 ? 00:00:00 [kso][root@localhost ~]# ps aux | grep bash 过滤出包含bash的进程信息root 4064 0.0 0.1 6504 628 ? Ss 15:45 0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "/usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients" root 4321 0.0 0.4 5640 1504 pts/1 Ss 15:46 0:00 bashroot 4672 0.0 0.1 5020 696 pts/1 R+ 16:01 0:00 grep bash[root@localhost ~]# top 查看进程动态信息top - 16:04:42 up 20 min, 2 users, load average: 0.00, 0.00, 0.00Tasks: 120 total, 2 running, 116 sleeping, 0 stopped, 2 zombieCpu(s): 0.3%us, 0.3%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%stMem: 360884k total, 354720k used, 6164k free, 14852k buffersSwap: 1052248k total, 0k used, 1052248k free, 209276k cachedPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND4230 root 20 0 39864 20m 10m S 0.0 5.9 0:00.15 puplet4158 root 15 0 128m 20m 16m S 0.0 5.8 0:01.07 vmtoolsd[root@localhost ~]# pgrep -l "log" 查询进程名中包含log的进程及其PID号2987 syslogd2990 klogd[root@localhost ~]# pgrep -l -U root -t tty1 查询用户root在tty1终端上运行的进程及PID号3583 mingetty[root@localhost ~]# pstree -aup 查看当前系统的进程树,包括各进程对应的PID号,用户名,完整命令等init,1├─acpid,3198├─anacron,3482 -s├─atd,3490├─auditd,2963│├─audispd,2965││└─{audispd},2966│└─{auditd},2964├─automount,3278│├─{automount},3279│├─{automount},3280│├─{automount},3283│└─{automount},3286├─avahi-daemon,3516,avahi[root@localhost ~]# cp /dev/cdrom haha.iso & 后台运行复制任务[1] 4355[root@localhost ~]# firefox http://localhost & 在后台运行火狐浏览器,不影响终端的使用[1] 4559[root@localhost ~]# jobs -l 查看当前终端中在后台运行的进程任务[1]+ 4559 Running firefox http://localhost &bg命令可以将后台中暂停执行(ctrl+z组合键挂起)的任务恢复运行fg 1命令可以将后台任务重新恢复到前台运行[root@localhost ~]# firefox http://localhost & 后台运行[1] 4842[root@localhost ~]# fg 1 恢复到前台运行firefox http://localhost[root@localhost ~]# pgrep -l "firefox" 查看firefox进程的PID5108 firefox[root@localhost ~]# kill 5108 终止firefox进程[root@localhost ~]# /usr/lib/firefox-3.0.18/run-mozilla.sh: line 131: 5108 已终止"$prog" ${1+"$@"}[root@localhost ~]# kill -9 5108 强制终止[root@localhost ~]# killall -9 firefox 杀死进程[root@localhost ~]# /usr/lib/firefox-3.0.18/run-mozilla.sh: line 131: 5215 已杀死"$prog" ${1+"$@"}[root@localhost ~]# pkill -9 -U "hehe" 强行杀死用户hehe的进程一次性计划任务:[root@localhost ~]# service atd status 查看atd服务是否已经运行atd (pid 3490) 正在运行...[root@localhost ~]# date 查看日期2015年01月31日星期六17:05:38 CST[root@localhost ~]# at 17:10 设置当天17点10分回车at> shutdown -r now<EOT> 重启系统job 1 at 2015-01-31 17:10 ctrl+d提交[root@localhost ~]# atq 查询计划任务1 2015-01-31 17:10 a root[root@localhost ~]# atrm 1 删除第一个计划任务[root@localhost ~]# atq 再查看已经没有计划任务周期性任务设置:[root@localhost ~]# service crond status 查看crond服务是否已经运行crond (pid 3440) 正在运行...[root@localhost ~]# crontab -e 编辑计划任务列表55 23 * * 7 /bin/cp /etc/passwd /home/jerry/pwd.txt每周日晚上23:55将/etc/passwd文件的内容复制到宿主目录中保存为pad.txt[root@localhost ~]# crontab -l 查看当前计划任务[root@localhost ~]# crontab -l -u hehe 查看用户hehe的计划任务删除计划任务可crontab -e编辑,然后删除其中内容若要清空所有任务计划,可以执行crontab -r命令。
操作系统实验4-Linux 进程管理
实验四Linux进程管理实验—、实验目的1 .在本实验中学习Linux操作系统的进程状态,并通过编写一些简单代码来观察各种情况下,Linux进程的状态, 进一步理解进程的状态及其转换机制。
2.通过本实验学习如何创建Linux进程及线程,通过实验,观察Linux进程及线程的异步执行。
理解进程及线程的区别及特性,进一步理解进程是资源分配单位,线程是独立调度单位。
二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Linux Ubuntu操作系统,gcc编译器。
三、实验内容和步骤1、Linux进程状态及其相互转换Linux系统中的进程主要有以下六种状态。
(1)TASK_RUNNING (可运行状态)。
正在运行的进程或在可运行进程队列(run_queue)中等待运行的进程处于该状态。
它实际上包含一般操作系统原理教材中所谓进程三种基本状态中的运行态和就绪两种状态。
当CPU空闲时,进程调度程序只在处于该状态的进程中选择优先级最高的进程运行。
Linux中运行态的进程可以进一步细分为3种:内核运行态、用户运行态和就绪态。
(2)TASKJNTERRUPTIBLE (可中断阻塞状态)。
处于可中断阻塞状态的进程排成一个可中断阻塞状态进程队列, 该队列中的阻塞进程在资源有效时,能被信号或中断唤醒进入到运行态队列。
(3)TASK.UNINTERRUPTIBLE (不可中断阻塞状态)。
不可中断指的是进程不响应信号。
处于不可中断阻塞状态的进程排成一个不可中断阻塞状态进程队列。
该队列中的阻塞进程,不可被其他进程唤醒,只有被使用wake_up() 函数明确唤醒时才能转换到可运行的就绪状态。
(4)TASK_STOP/TASK_TRACED (暂停状态)。
当进程收到信号 SIGSTOP、SIGTSTP. SIGTTIN 或 SIGTTOU 时就会进入暂停状态。
可向其发送SIGCONT信号,让进程转换到可运行状态。
(5)TASK_DEAD-EXIT_ZOMBIE (僵死状态)。
linux进程线程管理实验报告
ﻩﻩelse{
ﻩﻩﻩproc_number=i;
ﻩdo_something();
ﻩﻩ}
}
/* 让用户选择杀死哪个进程。输入数字(自编号)表示杀死该进程
* 输入q退出 */
while((ch=getchar())!='q'){
ﻩﻩif(isdigit(ch)){
kill(pid[ch-'0'],SIGTERM);
* 父进程把子进程的id保存到pid[i] */
ﻩfor(i=0;i<child_proc_number;i++){
ﻩﻩchild_pid=fork();
ﻩif(child_pid==-1){
ﻩﻩperror("creat error!\n");
ﻩreturn 1;
ﻩ}
ﻩelseif(child_pid>0)
第二次是杀死本组所有进程。即主进程以及它创建的所有子进程。执行后程序退出,进程结束。
Linux 操作系统,内核2.4.26 以上,预装有X-Window 、vi、gcc、gdb 和任ﻫ意web 浏览器。
2.2 实验前的准备工作
学习man 命令的用法,通过它查看fork 和kill 系统调用的在线帮助,并阅读参ﻫ考资料,学会fork 与kill 的用法。ﻫ复习C 语言的相关内容。
三、实验内容
3.1 补充POSIX 下进程控制的残缺版实验程序
3.2回答下列问题:
1. 你最初认为运行结果会怎么样?
2. 实际的结果什么样?有什么特点?试对产生该现象的原因进行分析。
3. proc_number 这个全局变量在各个子进程里的值相同吗?为什么?
实验进程管理实验报告
一、实验目的1. 加深对进程概念的理解,明确进程和程序的区别。
2. 进一步认识并发执行的实质,理解进程的创建、调度、同步与通信。
3. 学习使用Linux系统中的进程管理命令,掌握进程的监控、控制与优化。
二、实验环境操作系统:Linux Ubuntu 20.04实验工具:终端(Terminal)、shell命令三、实验内容1. 进程的基本概念与特性2. 进程的创建与调度3. 进程同步与通信4. 进程的监控与优化四、实验步骤1. 进程的基本概念与特性(1)通过阅读相关资料,了解进程的概念、特性和生命周期。
(2)使用shell命令查看当前系统中进程的状态,如ps、top、htop等。
2. 进程的创建与调度(1)使用fork()函数创建进程,观察父子进程之间的关系。
(2)使用exec()函数替换子进程的映像,实现进程的创建。
(3)使用wait()、waitpid()等函数等待子进程结束,控制进程执行顺序。
(4)通过修改进程优先级,观察进程调度策略的变化。
3. 进程同步与通信(1)使用互斥锁(mutex)实现进程同步,防止数据竞争。
(2)使用条件变量(condition variable)实现进程间的条件同步。
(3)使用信号量(semaphore)实现进程间的同步与通信。
(4)通过管道(pipe)、消息队列(message queue)、共享内存(shared memory)等机制实现进程间的通信。
4. 进程的监控与优化(1)使用ps、top、htop等命令监控进程的运行状态。
(2)通过调整进程优先级,优化进程的执行顺序。
(3)使用renice命令调整进程的实时性。
(4)使用nice命令调整进程的调度策略。
五、实验结果与分析1. 进程的基本概念与特性通过实验,我们了解到进程是具有一定独立功能的程序关于某个数据集合的一次运行活动,具有并发性、动态性、独立性、异步性和结构特征等特性。
2. 进程的创建与调度实验过程中,我们成功创建了多个进程,并通过修改进程优先级,观察到调度策略的变化。
进程管理实验报告
一、实验目的1. 理解进程的概念及其在操作系统中的作用。
2. 掌握Linux环境下进程的创建、调度、同步与通信等基本操作。
3. 通过实验加深对进程管理知识的理解和应用。
二、实验环境1. 操作系统:Linux2. 实验工具:xshell、vi编辑器、gcc编译器三、实验内容1. 进程的创建与终止2. 进程的调度策略3. 进程同步与互斥4. 进程间的通信四、实验步骤1. 进程的创建与终止(1)编写C语言程序,使用fork()系统调用创建子进程。
(2)通过exec()系统调用执行新的程序,实现进程替换。
(3)使用waitpid()函数等待子进程结束。
(4)使用kill()函数终止指定进程。
2. 进程的调度策略(1)观察Linux系统中进程调度算法,如FCFS、RR、SJF等。
(2)编写程序,模拟不同的调度算法,分析其性能。
3. 进程同步与互斥(1)使用信号量实现进程同步,如生产者-消费者问题。
(2)使用互斥锁实现进程互斥,如银行家算法。
4. 进程间的通信(1)使用管道实现进程间通信。
(2)使用消息队列实现进程间通信。
(3)使用共享内存实现进程间通信。
五、实验结果与分析1. 进程的创建与终止通过实验,我们掌握了使用fork()、exec()、waitpid()、kill()等系统调用创建、替换、等待和终止进程的方法。
在实际应用中,进程的创建与终止是进程管理的基础。
2. 进程的调度策略通过模拟不同的调度算法,我们发现FCFS算法简单,但效率较低;RR算法适用于交互式系统,但可能导致进程饥饿;SJF算法效率较高,但难以实现。
在实际应用中,应根据系统需求选择合适的调度算法。
3. 进程同步与互斥通过使用信号量和互斥锁,我们实现了进程同步与互斥。
在实际应用中,进程同步与互斥是保证系统正确性和效率的关键。
4. 进程间的通信通过使用管道、消息队列和共享内存,我们实现了进程间的通信。
在实际应用中,进程间的通信是提高系统并发性和效率的重要手段。
linux进程管理的实验报告
linux进程管理的实验报告Linux进程管理的实验报告引言:Linux操作系统是一种开源的操作系统,以其稳定性和高度可定制性而受到广泛使用。
在Linux系统中,进程管理是一个重要的组成部分,它负责控制和管理系统中运行的进程。
本实验报告旨在探讨Linux进程管理的相关概念和实践。
一、进程的基本概念进程是指在计算机系统中正在运行的一个程序实例。
每个进程都有自己的内存空间、寄存器和状态。
在Linux系统中,每个进程都有一个唯一的进程标识符(PID),用于标识和管理进程。
二、进程的创建和终止在Linux系统中,进程的创建是通过fork()系统调用来实现的。
fork()系统调用会创建一个新的进程,新进程是原进程的一个副本,包括代码、数据和堆栈等。
新进程和原进程共享相同的代码段,但是拥有独立的数据和堆栈。
进程的终止可以通过exit()系统调用来实现。
当一个进程调用exit()系统调用时,它会释放所有的资源,并通知操作系统该进程已经终止。
此外,父进程可以通过wait()系统调用来等待子进程的终止,并获取子进程的退出状态。
三、进程的调度和优先级在Linux系统中,进程的调度是由调度器负责的。
调度器根据进程的优先级和调度策略来确定下一个要运行的进程。
Linux系统中有多种调度策略,如先来先服务(FCFS)、最短作业优先(SJF)、轮转调度(Round Robin)等。
进程的优先级用一个数字表示,范围从-20到19,其中-20表示最高优先级,19表示最低优先级。
较高优先级的进程会被优先调度,以保证其能够及时响应用户的请求。
四、进程的状态转换在Linux系统中,进程可以处于不同的状态,如运行态、就绪态和阻塞态等。
进程的状态转换是由操作系统根据进程的行为和外部事件来控制的。
当一个进程被创建时,它处于就绪态,等待被调度执行。
当进程获得CPU资源并开始执行时,它进入运行态。
当进程需要等待某个事件发生时,如等待用户输入或等待某个文件读写完成,它会进入阻塞态。
进程管理_实验报告
一、实验目的1. 理解Linux操作系统中进程的概念,明确进程与程序的区别。
2. 掌握Linux下进程的创建、调度、同步与通信等基本操作。
3. 学会使用Linux命令查看和管理进程。
二、实验环境1. 操作系统:Linux2. 编程语言:C/C++3. 开发工具:gcc、gdb三、实验内容1. 进程创建与调度2. 进程同步与互斥3. 进程通信4. 进程控制四、实验步骤1. 进程创建与调度(1)编写一个C程序,创建一个子进程,并在父进程中打印出子进程的进程标识符(PID)。
```c#include <stdio.h>#include <unistd.h>#include <sys/types.h>int main() {pid_t pid;pid = fork(); // 创建子进程if (pid == 0) { // 子进程printf("子进程的PID:%d\n", getpid());} else if (pid > 0) { // 父进程printf("父进程的PID:%d,子进程的PID:%d\n", getpid(), pid); } else {printf("创建子进程失败\n");}return 0;}```(2)编译并运行程序,观察结果。
2. 进程同步与互斥(1)编写一个C程序,使用互斥锁(mutex)实现两个进程的同步。
```c#include <stdio.h>#include <stdlib.h>#include <pthread.h>pthread_mutex_t mutex;void thread_func(void arg) {pthread_mutex_lock(&mutex); // 获取互斥锁printf("线程 %ld 获取了互斥锁\n", pthread_self());sleep(1);pthread_mutex_unlock(&mutex); // 释放互斥锁return NULL;}int main() {pthread_t thread1, thread2;pthread_mutex_init(&mutex, NULL); // 初始化互斥锁pthread_create(&thread1, NULL, thread_func, (void )1);pthread_create(&thread2, NULL, thread_func, (void )2);pthread_join(thread1, NULL);pthread_join(thread2, NULL);pthread_mutex_destroy(&mutex); // 销毁互斥锁return 0;}```(2)编译并运行程序,观察结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
putchar( c1);
else
putchar( ar);}return源自0;)运行结果:bca
分析:第一个while里调用fork()函数一次,返回两次。子进程P1得到的返回值是0,父进程得到的返回值是新子进程的进程ID(正 整数);接下来父进程和子进程P1两个分支运行,判断P1二二0,子 进程P1符合条件,输出%";接下来else里面的while里再调用fork()函数一次,子进程P2得到的返回值是0,父进程得到的返回值 是新子进程的进程ID(正整数);接下来判断P2=:0,子进程P2符 合条件,输出,接下来父进程输出“a”,程序结束。
“b”和字符“c”,试观察记录屏幕上的显示结果,并分析原因。 程序代码:
#include<stdio.h>
int main()
{
int pl ,p2 ;
while((p 1 =fork())==-1);
if(pl==0) putchar(b);
else
{
while((p2=fork())==-1);
exit(O);
)
else
while((p2=fork())==-1);
if(p2==0)
{
wait_mark=l;
signal(SIGINT,SIG_IGN);
signal(17,stop);
waiting();
printf(HChild Process 12 is Killed by Parent
分析:本实验和上一个实验一样,只是将每个进程输出一个字符改 为每个进程输出一句话。第一个while里调用fork()函数一次,返回 两次。子进程P1得到的返回值是0,父进程得到的返回值是新子进 程的进程ID(正整数);接下来父进程和子进程P1两个分支运行, 判断Pl=o,子进程Pl符合条件,输出uChild1is running!^:接下 来else里面的while里再调用fork()函数一次,子进程P2得到的返 回值是0,父进程得到的返回值是新子进程的进程ID(正整数); 接下来判断P2==0,子进程P2符合条件,输出“Child2 is running!”, 接下来父进程输出“Father is running!”,程序结束。
(2)进程的控制
1修改已编写的程序,将每个进程输出一个字符改为每个进程输出 一句话,在观察程序执行时屏幕上出现的现象,并分析原因。
程序代码:
#inckide<stdio.h>
int main()
{
int pLp2;
while((p 1 =fork())==-1);
if(pl==O)
printf(HChildl is running!\nM);
父进程等待两个子进程终止后,输出如下的信息后终止:
Parent Process is Killed!
观察并分析出现的现象。
程序代码:
#inckide<stdio.h>
#include<signal.h>
int wnit_mark;
void waiting()
{
while(wait_mark== 1);
printf(nexec error !\nH);
return 0;
—
运行结果:==system call execl testing ===
五11月4 22:23:51 CST 2011
分析:创建了进程,使用exec函数族使子进程执行新的LI标程序, 输出结果为目标程序的输出。
(3)进程信号处理
编写程序使用系统调用fork()创建两个子进程,再用系统调用singal
()让父进程捕捉键盘上来的中断信号(即按QH+c键);当捕捉到 中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子 进程捕捉到信号后分别输出下列信息后终止:
Child Process11is Killed by Parent!
Child Process 12 is Killed by Parent!
(1)加深对进程概念的理解,明确进程和程序的区别。
(2)进一步认识并发执行的实质。
(3)学习通过进程执行新的U标程序的方法。
(4)了解Linux系统中进程信号处理的基本原理。
Red Hat Linux
(1)进程的创建
编写一段程序,使用系统调用fork()创建两个子进程,当此进程运 行时,在系统中有一个父进程和两个子进程活动,让每一个进程在 屏幕上显示一个字符,父进程显示字符“a”;子进程分别显示字符
2创建进程,使用exec函数族使子进程执行新的LI标程序,观察并 分析出现的现象。
程序代码:
#include <stdio.h>
#include <unistd.h>
int main()
{
printf(n===systeni call excel testing ===\nM); execlp(MdateH/date,\O);
else
{
while((p2=fork())==-1);
if(p2==0)
printf(HChild2 is iunning!\nM);
else
printf(HFather is ninning!\nH);
}
return 0;
)
运行结果:Child 1 is running!
Child2 is running! Father is running!
}
void stop()
{
wait_mark=0;
)
int main()
{
int pkp2;
while((p 1 =fork())==-1);
if(pl==O)
{
wait_mark=l;
signal(SIGINT,SIG_IGN);
signal(16,stop);
waiting();
printf("Child Process 11 is Killed by Parent!\iiu);