第七章 进程控制及其操作(二)

接上一章,在进行了进程最后部分的学习后,现将进程最后部分的知识进行总结学习

同时会附上进行my_shell项目文档实现的经验


一,进程的其他操作

本部分是一些进程的其他操作,虽然不如进程操作的部分重要,但是还是有很重要的意义

1.获取进程ID

进程ID,是进程的标识之一,进程ID(即PID)的重要性不言而喻

而且,通过进程ID,方便对进程进行其他的操作

#incldue<unistd.h>
#incldue<sys/types.h>
pid_t getpid(void)      //获取当前进程ID
pid_t getppid(void)     //获取当前进程父进程ID

另外还有获取进程实际用户,有效用户的函数,在之前已经提到过,此处不再赘述

2.setuid与setgid

看过<鸟哥的Linux私房菜>的同学,可能对这两个概念了解的比较好一点

简而言之,这两个函数,使用来处理程序中对用户权限的处理问题

#include<sys/types.h>
#include<unistd.h>
int setuid(uid_t uid)
itn setgid(gid_t gid)

其中需要谨慎处理的是,root权限的问题

因为,一旦用root权限去处理,则最后会将uid与gid进行修改,最后会导致失去root权限的问题出现

下面来看一个简单的例子

#include<sys/stat.h>
#include<unistd.h>
#include<stdio.h>
#include<fcntl.h>
#include<sys/types.h>
int main(int argc,char **argv)
{
    int fd;

    printf("Process Start!\n");
    printf("Process uid is %d,euid is %d\n",getuid(  ),geteuid(  ));

    fd = open("test.c",O_RDWR);
    if(fd == -1)
        printf("Error!");
    else
        printf("open Suessfully!\n");

    close(fd);

    return 0;
}

上面例子的结果

此即为文件权限的问题

3.改变进程的优先级

改变进程的优先级,是用来将常用,频繁的进程的优先级提高,换句话来说,就是提高计算机的效率

需要掌握的有三个函数

#incldue<unistd.h>
int nice(int increment);

#incldue<sys/resource.h>
int getpriority(int which,int who);
int setpriority(int which,int who,int prio);

具体示例,还请自行进行测试


二,my_shell经验分享

进程的知识,暂时告一段落,在此处,我想要和大家分享的是my_shell项目实践经验

我先放出,我的源码,以及项目文档

传送门

想要分享的经验如下:

  1. 进行编码前,多思考,多考虑,尽量考虑周到一点

  2. 多和别人交流,会有意想不到的收获


现在是技术上的分享

  1. 关于守护进程,创建出一个脱离当前shell环境的进程,使用守护进程,算是后台进程的一种

  2. 信号的实现,使用signal系列函数 signal(SIGCHLD,SIG_IGN)

  3. 经过我亲身经历,makefile真的很有用,用了都说好,而且还能装逼(滑稽-> <-)

  4. PATH环境变量的设置,注意/etc/profile 与~/.bash_profile,的区别,并且学会如何修改环境变量

以上即为我的分享,有不足的地方还请大家指出,

下次会进行线程控制的分享(有机会一定补上文件操作的坑)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值