Linux学习第七天

本文介绍了Linux进程控制的相关概念,包括开机启动进程、进程身份(uid、gid、euid、egid)、权限提升(如chmod u+s)、后台执行进程、查看进程状态(如ps、top)以及进程调度策略。还探讨了如何修改用户id、进程优先级调整(renice)、定时任务(crontab)和文件系统(如NFS)。此外,讲解了fork、exec家族函数在进程创建和替换中的应用,并讨论了孤儿进程和僵尸进程的处理。最后,涉及了多线程写文件和进程间通信的方法。
摘要由CSDN通过智能技术生成

一、进程控制

1、开机后bootloader将系统的第一个进程启动了起来,bootloader是烧制在bios上的

2、第一个例子:getpid

 

#include"func.h"

int main(int argc,char* argv[])

{

 

    pid_t pid,ppid;

    pid=getpid();

    ppid=getppid();

    printf("pid=%d,ppid=%d",pid,ppid);

    return 0;

}

 

3、一个进程有4个身份:真实用户id、真实组id;有效用户id、有效组id

(1)真实用户id:getuid()

(2)真实组id:getgid()

(3)有效用户id:geteuid()

(4)有效组id:getegid()

 

4、第二个例子:gid和uid的例子、euid和egid的例子

#include"func.h"

 

int main()

{

    pid_t uid,gid,euid,egid;

    uid=getuid();

    gid=getgid();

    euid=geteuid();

    egid=getegid();

    printf("uid=%d,gid=%d,euid=%d,egid=%d",uid,gid,euid,egid);

    return 0;

}

 

5、第三个例子modify_file.c

 

#include <func.h>

 

int main(int argc,char* argv[])

{

    printf("uid=%d,gid=%d,euid=%d,egid=%d\n",getuid(),getgid(),geteuid(),getegid());

    int fd=open("file",O_RDWR);

    ERROR_CHECK(fd,-1,"open");

    write(fd,"hello",5);

    close(fd);

    return 0;

}

 

 

6、s是权限提升

Chmod u+s a.out          该命令可以实现权限提升
权限提升:在权限控制中,使用权限提升后,也就是设置了该属性后,用户运行a.out时,a.out进程的有效用户身份将不再是运行a.out的用户,而是a.out文件的所有者。

 

7、红色的命令(可以实现权限提升):sudo、su、chmod u+s

命令chmod g+s a.out 对同组用户进行权限提升

命令chmod o+t a.out 增加粘滞键,增加一些权限检查

 

8、如何修改真实用户id?

接口setuid,该命令只有sudo权限才可以执行

sudo实现的原理,提升euid的权限

 

使用命令man setuid获取更多帮助

  int setuid(uid_t uid);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值