首页 > 系统相关 >OS-Lab2-Linux进程控制相关命令和系统调用(含gcc编程)

OS-Lab2-Linux进程控制相关命令和系统调用(含gcc编程)

时间:2024-10-16 14:10:41浏览次数:5  
标签:gcc 3538560 mytool2 print Lab2 mytool1 Linux 进程

实验目的
1) 概念:Linux的gcc编译器
2) 演示/实践:gcc编译器的初步和入门(编写一个带printf的while程序)
3) 演示/实践:Linux进程控制相关的命令(如ps/pstree/top/kill/等)演示/实践:Linux进程控制相关的系统调用(如fork()/getpid()等)
4) 概念:Linux的gdb调试器
5) 概念:Linux的make工具及其Makefile
6) 演示/实践:make工具及其Makefile的初步和入门(多个c/h文件构成的一个C项目:但是存在bug);进而用gdb调试器来调试和分析此bug
实验步骤:
Task1: gcc编译器的初步和入门:利用vi/vim编辑器,输入以下程序while.c的代码,然后利用gcc编译器进行编译、链接,和运行




Task2: Linux进程控制相关的命令:利用top/ kill/ps/htop/等的命令,要求完成的步骤如下描述。
1.输入top观察当前进程状态:

2.运行以上lab1的while程序,再次执行top命令,然后观察新的、当前的进程状态

3. 等待while程序执行完成正常结束后,进程消失

4. 重新执行while程序,并使用kill结束程序,top中进程消失


5. 使用htop命令

Task3: Linux进程控制相关的系统调用(如fork()/getpid()等):通过process.c程序来理解Linux进程创建的过程和特点(如父子进程的关系、“一次调用和两次返回”的特点)。具体过程包括:利用vi/vim编辑器,输入以下程序process.c的代码,然后利用gcc编译器进行编译、链接,和运行




Task4: make工具及其Makefile的初步和入门,gdb调试器的初步和入门:利用vi/vim编辑器,编写一个由多个文件(如.c和.h)构成的程序,通过Makefile文件来使用make,从而完成本程序的编译和链接过程,然后利用gcc编译器进行编译、链接和运行,观察其存在的bug,然后利用gdb调试器分析和解决这个bug。

点击查看代码
/*main.c*/
#include "mytool1.h"
#include "mytool2.h"
int main()
{
	mytool1_print("hello mytool1!");
	mytool2_print("hello mytool2!");
	return 0;
}
/*mytool1.c*/
#include "mytool1.h"
#include <stdio.h>
void mytool1_print(char *print_str)
{
	printf("This is mytool1 print : %s ",print_str);
}
/*mytool1.h*/
#ifndef _MYTOOL_1_H
#define _MYTOOL_1_H
	void mytool1_print(char *print_str);
#endif
/*mytool2.c*/
#include "mytool2.h"
#include <stdio.h>
void mytool2_print(char *string)
{
	char * string2;
	int size,i;
    size = strlen(string1);
	 string2 =(char*)malloc(size+1);
    for(i=0;i<size;i++)
       string2[size-i]=string1[i];
    string2[size+1]=‘\0’;
    printf(“the changed string is %s\n ”,string2);
}
/*mytool2.h*/
#ifndef _MYTOOL_2_H
#define _MYTOOL_2_H
	void mytool2_print(char *print_str);
#endif

![](/i/l/?n=24&i=blog/3538560/202410/3538560-20241016140001172-2123688265.png) 根据编译过程中的报错添加string1的定义,修改mytool2.c为如下: ![](/i/l/?n=24&i=blog/3538560/202410/3538560-20241016140047261-1296576162.png) 修改之后继续执行make此时发现执行成功 ![](/i/l/?n=24&i=blog/3538560/202410/3538560-20241016140124153-603876030.png) 然后进行gcc编译、链接、运行代码: ![](/i/l/?n=24&i=blog/3538560/202410/3538560-20241016140757691-1177487262.png) 运行时发现语句输出不全,故使用gdb对其进行调试,然后发现应该是mytool2.c的问题: ![](/i/l/?n=24&i=blog/3538560/202410/3538560-20241016140822745-1861613314.png) 对mytool2.c进行调试,然后发现应该是循环体出问题: ![](/i/l/?n=24&i=blog/3538560/202410/3538560-20241016140859324-1094517684.png) 然后进入代码进行修改,如下,具体修改了size-i与size+1: ![](/i/l/?n=24&i=blog/3538560/202410/3538560-20241016140928102-2123014239.png) 输出得到正确输出: ![](/i/l/?n=24&i=blog/3538560/202410/3538560-20241016140950705-837348803.png) **Task5** 请用自己的语言(当然,也可结合辅助的图),谈谈你对Linux的fork()系统调用的“一次调用和两次返回”这个特点的理解: Linux 中的 fork() 系统调用是用于创建一个新的进程的函数,它会在当前进程的基础上复制一个完全相同的子进程,并且在父进程和子进程中都会返回。这样,fork() 调用一开始似乎只有一次返回,但实际上会在两个进程中各返回一次,形成了“一次调用,两次返回”的特点。

标签:gcc,3538560,mytool2,print,Lab2,mytool1,Linux,进程
From: https://www.cnblogs.com/arm-blog/p/18469822

相关文章

  • OS-Lab1-Linux的常见命令和Shell脚本编程
    Lab1:Linux常见命令的基本使用和总结:如ls、cd、mkdir、torch、rm、mv、clear、grep、find、cat、shutdown等。Lab2:Linux常见命令的应用案例:下面的步骤,通过相关的Linux命令,完成指定步骤的操作Lab3:VMware的Host(如Windows系统)与Guest(如UbuntuLinux)的数据交换:常见......
  • Linux环境搭建vsftpd服务
    vsftpd(verysecureFTPdaemon)是一个广泛使用的、开源的FTP服务器软件,以其高性能、高安全性和稳定性著称,支持多种FTP相关协议,包括FTP、SFTP(通过SSH)、TLS/SSL加密的FTP等。一:安装vsftpd#安装vsftpd服务yuminstallvsftpd-y#启动FTP服务,并设置开机自启动systemctlenablev......
  • Linux 和 Windows 在处理系统休眠或睡眠状态的方式上存在差异,
    Linux和Windows在处理系统休眠或睡眠状态的方式上存在差异,这主要取决于各自的设计理念以及对系统性能和功耗的考虑。###Linux对休眠或睡眠的处理Linux内核支持多种节能模式,包括但不限于:-**休眠(SuspendtoDisk)**:系统保存当前状态到硬盘,然后关闭电源。恢复时重新加载之前......
  • 支持节能减排—Linux 省电10招
    https://blog.sciencenet.cn/home.php?mod=space&uid=290274&do=blog&id=280194 1.LinuxKernel2.6.21开始支持Tickless(此前的内核默认设置为1000Hztimertick),于是系统空闲时不再无故骚扰CPU,可以节省大量能耗。Fedora7+以及目前的UbuntuLinux发行版都含有Tickless......
  • 第33篇 window和linux的文件路径的区别
    今天不讨论技术问题,而是简单聊一下不同系统的路径问题正斜杠,又称左斜杠,符号是"/";反斜杠,也称右斜杠,符号是""。在Unix/Linux中,路径的分隔采用正斜杠"/",比如"/home/hutaow";而在Windows中,路径分隔采用反斜杠"",比如"C:\Windows\System"文件路径的表示可以分为绝对路径和相对路径。W......
  • linux 操作系统下 dpkg-preconfigure 命令介绍和使用案例
    linux操作系统下dpkg-preconfigure命令介绍和使用案例dpkg-preconfigure命令介绍dpkg-preconfigure是Debian和基于Debian的Linux发行版中用于预配置软件包的工具。它允许用户在安装软件包之前,提前提供配置选项,从而简化安装过程。命令格式dpkg-preconfigure[选......
  • 实现Linux to go !ubuntu装入移动硬盘,实现在不同电脑运行。
    一.准备一个u盘制作启动盘1.下载ubuntu镜像文件Ubuntu20.04.6LTS(FocalFossa)2.使用Rufus制作Ubuntu启动盘        下载Rufus-轻松创建USB启动盘   注意此操作会清空u盘!二.移动硬盘磁盘分区1.下载DiskGenius软件,选中自己的移动硬盘2.选......
  • linux基本指令(二)
    今天我们继续来盘Linux基本指令,如果对于前面的指令还有困惑,可以去查看之前我写的那一篇Linux基本指令(一)。mv指令(move)语法mv[选项]源文件/目录目标文件/目录功能1.移动文件或目录比如:将文件 file1.txt 移动到 /home/user/Documents/ 目录中:mvfile1.txt/home/user......
  • 初始Linux之指令(一)
    目录一:ls指令二:pwd指令三:cd命令四:touch命令五:mkdir命令六:rmdir命令,rm命令七:man命令八:cp命令 九:mv命令十:nano命令十一:cat命令十二:more指令十三:less命令一:ls指令在正式开始讲解ls指令之前,先说一下,复制粘贴删除在Linux下的指令复制:Ctrl+insert粘贴:shift+inser......
  • 【Linux探索学习】第五弹——Linux用户管理:创建、删除与查看普通用户
    前言:Linux下创建普通用户是我们以后经常要做的一件事,一个超级用户下可以有多个普通用户,这样我们就可以用这些普通用户去做不同的事情,所以学习如何创建并管理这些用户就显得尤为重要提醒:本篇是在Ubuntu系统下进行的操作目录一、创建普通用户二、测试是否创建成功方法一......