【操作系统】复习荟萃(四)
Linux操作系统基本命令
vmstat:系统状态
pwd:目录
who am i:当前用户信息
who:谁在系统中
cat:建立文件,查看文件
ln:文件链接
cp:复制
ls:列目录 (ls -l)查看当前目录内容
cd:改变当前目录
ps:报告进程状态
kill:传送信号
源程序多少行:cat创建+显示,重定向cat到某一个文件里
接口:命令接口,系统调用
查看信息命令
文件操作命令
修改文件属性:
进程管理
信息传递操作:
shell编程
shell:高级程序语言,文档shel.h
执行时:
1.变成可执行:chmod 命令;
chmod 命令更改所有者,改变文件的权限
$ chmod 755 shdemo.h (文件主可读、写、执行,同组人和其他人可读和执行)
户主,其他用户,同组用户,111(可读可写可执行)
111 111 111(WRE)
shdemo.h (直接键入程序文件名执行)
sh shel.h(执行)
下面程序将当前目录中的文件(用命令 ls 列出),复制到 backup 子目录中建立备份
for filename in ˋlsˋ #命令打反引号
do
cp $filename backup/$filename
if [ $? –ne 0 ]
echo “copy $filename failed”
fi
done
系统调用
- 程序接口,编程可调用,提供的服务不能直接产生,只能通过调用实现,用户程序执行时在用户态下面执行,核心态(可执行特权指令)下干什么?为了系统安全
- 大题
(1)创建子进程,子进程之间利用管道通信,利用信号通信,利用客户/服务器模式通信,这段程序用到了哪些系统调用?(实验三)
eg:
fork:创建子进程
exit:退出
abort:可异常中止
mail:发邮箱
pipe 创建管道
lockf
read
msgget
getrid
进程管理及进程通信
(2)给出计算结果
多道系统,可能会有多道进程,子进程,父进程,可能里面有多个进程,找代码里面有几个进程,子进程和父进程的输出顺序,结果
/* 用fork()系统调用创建子进程的例子*/
int main()
{
int i;
if (i=fork()) //创建子进程
{
i=wait(0); /*父进程执行的程序段*/
/* 等待子进程结束*/
printf("It is parent process.\n");
printf("The child process,ID number %d, is finished.\n",i);
}
else{
printf("It is child process.\n");
sleep(10);
/*子进程执行的程序段*/
exit(0); /*向父进程发出结束信号*/
}
}
fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;
父进程一旦调用了wait就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果成功,wait会返回被收集的子进程的进程ID,如果调用进程没有子进程,调用就会失败,此时wait返回-1
/*建立进程树*/
#include<unistd.h>
int main()
{
int i;
printf(“My pid is %d, my father’s pid is %d\n”,getpid(),getppid());
for(i=0; i<3; i++)
if(fork()==0)
printf(“%d pid=%d ppid=%d\n”, i,getpid(),getppid());
else
{
j=wait(0);
printf(“ %d:The chile %d is finished.\n” ,getpid(),j);
}
}
管程: