格式: cd [路径名称] 如:cd .. 回到上层目录
cd / 回到根目录
cd ~ 可进入用户的home目录 cd /home/t1 进入/home/t1
3. pwd (显示当前工作目录的绝对路径)
格式: pwd 4. mkdir (创建目录)
格式:mkdir [目录名称]
例如: mkdir /home/s2001/newdir 5. rmdir (删除空目录)
格式:rmdir [选项] [目录名称] 6. cp (文件或目录的复制)
格式:cp [选项] 源文件或目录 目标文件或目录 例如: cp 文件名1 文件名2
7. mv (文件或目录更名或将文件由一个目录移到另一个目录中) 格式:mv [选项] 源文件或目录 目标文件或目录 8. rm (删除文件或目录) 格式:rm [选项] 文件名|目录名 9. cat (显示文件) 格式:cat [选项] 文件列表 例如:cat 文件名
cat命令也可用来建立新文件:cat >文件名,ctrl+d结束输入 10. gzip命令
格式:gzip [选项] 文件或目录 功能:压缩/解压缩文件。 主要选项:
-d 解压缩文件,相当于gunzip命令。
-r 参数为目录时,按目录结构递归压缩目录中的所有文件。
14
-v 显示文件的压缩比例。 2.2 几个进程相关的命令 1、ps命令
功能:显示正在执行的进程的信息 格式:ps[options][pids] 常用选项:
-l 以长列表的形式列出 -a 显示其它用户的进程 -c 显示环境
-r 只显示正在运行的程序 栏目说明: UID 用户的标识符
PID 进程的标识符,是系统赋予每个正在执行的进程的唯一编号 PPID 父进程的标识符 PRI 进程的优先级 SIZE 虚拟内存大小 RSS 驻留空间大小
STAT 进程状态。R-进程正在运行;S-睡眠;D-不可中断睡眠;T-停止或跟踪;
Z-僵尸进程;W-没有驻留页
TTY 进程所在的虚拟终端号 TIME 进程已经运行的时间 COMMAND 进程的名称 2、jobs 命令
功能:列出当前正在运行的作业信息,该命令没有选项和参数。 格式:jobs 3、kill 命名
功能:终止或撤销一个进程。 格式:kill [options] pid 常用选项:
15
-l 输出信号名列表
-p 指kill只输出已命名pid,而且不送信号给它
-s<信号名> 指出欲发出的信号,信号是以信号名或数字给出的 4、nice命令
功能:通过修改调度优先级来运行一个程序。 格式:nice [options][COMMAND[arg…]] 常用选项:
-n 加上由指定的优先级而不是默认值10 --version 输出版本信息 2.3 Vi编辑器的使用
vi 提供二种工作模式:插入模式 (insert mode)和命令模式 (command mode)。 使用者进入 vi 后,即处在命令模式下,此刻键入的任何字符皆被视为命令,可进行删除、修改、存盘等操作。要输入信息,应转换到插入模式。 (a)命令模式
在插入模式下,按 ESC 可切换到命令模式。命令模式下,可选用下列指令离开 vi:
:q! 离开 vi,并放弃刚在缓冲区内编辑的内容 :wq 将缓冲区内的资料写入磁盘中,并离开 vi :ZZ 同 wq :x 同 wq
:w 将缓冲区内的资料写入磁盘中,但并不离开 vi :q 离开 vi,若文件被修改过,则要被要求确认是否放弃修改的内容,此指令可与:w配合使用。 (b)插入模式
在命令模式下,按i或a,进入输入模式,此时可以编辑文件内容。 (C)gcc编译器的使用
gcc由GNU之父Stallman所开发的linux下的编译器,全称为GNU Compiler Collection。在linux下可以直接编译c语言源程序,可生成可执行文件。
例如:gcc hello.c 编译hello.c源文件,若通过,会自动生成名称为
16
a.out可执行文件。
例如:gcc hello.c -o hello 编译hello.c源文件,若通过,会生成hello.exe可执行文件。
例:新建文件hello.c 并编辑一段文字进行保存。 (1) 在提示符下输入vi hello.c,按Enter键。
(2) 输入i(或按insert键),进入插入模式,左下角会出现“插入”。 (3) 输入程序如下: #include
printf(“hello \\n”); printf(“hello everyone”); }
(4) 按Esc键离开插入模式,输入“:wq”,将缓冲区内的资料写入磁盘中,
并离开 vi。
(5) 在命令提示符下输入编译命令:gcc hello.c –o hello,若通过,会
生成hello.exe可执行文件。
(6) 运行,在命令提示符下输入./hello,显示程序运行结果。
实验三 进程管理
3.1 Linux下系统调用函数 1.fork( )
功能:创建一个新进程,pid=fork() 参数定义: int fork()
? 0 在子进程中,pid变量保存的fork()返回值为0,表示当前进程是子进程。 ? >0 在父进程中,pid变量保存的fork()返回值为子进程的id值。 ? -1 创建失败。
如果fork()调用成功,它向父进程返回子进程的PID,并向子进程返回0,即fork()被调用了一次,但返回了两次。此时OS在内存中建立一个新进程,
17
所创建的新进程是调用fork()父进程的副本,称为子进程。子进程继承了父进程的许多特性,并具有与父进程完全相同的用户级上下文。父进程与子进程并发执行。 2.exec()系列
系统调用exec()系列,也可以用于新程序的运行。fork()只是将父进程的用户级上下文拷贝到新进程中,而exec()系列可以将一个可执行的二进制文件覆盖在新进程的用户级上下文的存储空间上,以更改新进程的用户级上下文。exec()系列中的系统调用都完成相同的功能,它们把一个新进程调入内存,来改变调用进程的执行代码,从而形成新进程。如果exec()调用成功,调用进程将被覆盖,然后从新进程的入口开始执行,这样就产生了一个新进程,新进程的进程标识符id与调用进程相同。
exec()没有建立一个与调用进程并发的子进程,而是用新进程取代了原来进程。所以exec()调用成功后,没有任何数据返回,这与fork()不同。exec()系列系统调用在UNIX系统库unisted.h 中,共有execl ,execlp,execle,execv,execvp,execve六个,其基本功能相同,只是以不同的方式给出参数。
一种是直接给出参数的指针,如: int execl( path,arg0[,arg1,…,argn],0); char *path,*arg0,arg1,…, *argnj;
另一种是给出指向参数表的指针,如: int execv(path,argv); char *path,*argv[ ]; 具体使用可参考有关书。 3.exec( )和fork( )联合使用
系统调用exec和fork( )联合使用能为程序开发提供有力支持。用fork()建立子进程,然后再子进程中使用exec(),这样就实现了父进程和 一个与它完全不相同子进程的并发执行。
一般,wait,exec联合使用的模型为:
int status;
…
18