44-Linux_僵尸进程及Linux操作文件的底层的系统调用

僵尸进程及Linux操作文件的底层的系统调用

僵死进程(僵尸进程)

1.产生的原因或者条件

当子进程先于父进程结束,父进程没有获取子进程的退出码,此时子进程变成僵死进程;

2.如何去处理僵死进程?

(1)父进程先结束(子进程会变成孤儿进程,孤儿进程会被收养(红帽子是init(pid==1)收养孤儿进程,Unbuntu是操作系统指定了一个进程));
(2)父进程调用wait()方法获取子进程的退出码;
父进程执行7次,子进程改为3次;就能观察到僵死进程(放到后台运行&,ps);

处理僵死进程的方法一:

父进程执行3次,子进程改为7次;去观察僵死进程没有了;
收养孤儿进程 的,一定会调用wait(就是获取退出码的);获取了退出码,操作系统就会把pcb删掉,就不会出现僵死进程;

处理僵死进程的方法二:

父进程调用wait方法;

Linux操作文件的底层的系统调用

C语言操作文件的几个库函数:fopen,fread,fwrite,fclose;
系统调用:open,read,write,close;
系统调用方法实现在内核中;(陷入内核,切换到内核)

1.系统调用的介绍

1.open的介绍:

open重载:两个参数用于打开一个已经存在的文件;三个参数的用于新建一个文件,并设置访问权限;
pathname:文件和路径和名称;
flags:文件的打开方式;
mode:文件的权限,如"0600";
open的返回值为int,称为文件描述符;
flags的打开标志,如:

O_WRONLY:只写打开;
O_RDONLY:只读打开;
O_RDWR:读写方式打开;
O_CREAT:文件不存在则创建;
O_APPEND:文件末尾追加;
O_TRUNC:清空文件,重新写入;

2.write的介绍

fd:对应打开的文件描述符
buf:写入的文件内容;
count:要写入多少个字节;
返回值:ssize_t:实际写入了多少个字节;

3.read

fd:对应打开的文件描述符;
buf:把文件内容读取到一块空间buf中;
count:期望要读取的字节数;
返回值:ssize_t:实际读取了多少个字节;

4.close

关闭文件描述符;

5.文件描述符

文件打开以后,内核给文件的一个编号;(>0的整数)
0,1,2是默认打开的;
0:标准输入;
1:标准输出;
2:标准错误输出;

2.应用

1.打开一个文件并往里面写入Hello:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<assert.h>
#include<fcntl.h>

int main()
{
    int fd=open("file.txt",O_WRONLY|O_CREAT,0600);
    assert(fd!=-1);
    printf("fd=%d\n",fd);

    write(fd,"Hello",5);
    close(fd);
    exit(0);
}
2.打开一个文件,读取文件内容
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<fcntl.h>
#include<assert.h>

int main()
{
    int fd=open("file.txt",O_RDONLY);
    assert(fd!=-1);
    printf("fd=%d\n",fd);
    
    char buff[128]={0};
    int n= read(fd,buff,127);
    printf("n=%d buff=%s\n",n,buff);
    close(fd);
    exit(0);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值