针对unix环境编程的一些提问!

1. 为什么会把文件的权限管理和在程序中进行权限管理分开。

一个用户或root安装了一套软件,那么管理员就可以直接更改文件系统的权限位以决定其他用户是否可以执行我安装的软件,而不是让软件启动后其自身再判断当前用户是否可以执行此软件,这就给root用户管理所安装软件的执行功能,而一旦软件安装完成,软件的执行文件将不可更改,那么要更改软件代码来判断权限的功能将是不可行的。

2. 进程组的作用?

首先有两个函数需要用到进程组:waitpid和kill,可以等待进程组中一个进程的终止,可以用kill给进程组发信号。shell执行一个程序,这个程序可能会创建几个进程,而这几个进程都属于一个进程组,如果用户想终止这个程序的执行,在shell中断输入ctrl+c,那么终端就给进程组发送终止信号,可见这一个程序属于一个作业或一个任务,想终止任务就需要终止所有进程,进程组给shell管理作业提供了方便,而且一条管道线上的进程被shell安排到一个进程组内,因为一条管道线上的程序属于一个作业,是一个整体。

3. 会话的作用?

一个会话中通常包含多个进程组,有一个前台进程组和几个后台进程组。我们再考虑下kill发送信号的函数,这个函数是有权限的,并不能发送任何信号给任何进程,一般是当前用户可以发送信号给当前用户所属的进程,有一个特例是:如果被发送的信号是SIGCONT,则它可以发送给属于同一会话的任何其他进程。这里会话的作用就是可以由会话中的进程来控制被停止的进程继续运行,考虑下控制终端的ctrl+z挂起操作,挂起后前台进程被暂停了,是进入后台后暂停,由shell得到控制终端(shell成为前台进程组)执行其他命令,其他操作执行完后,shell可以执行fg命令来重新进入刚才被挂起的进程,这时shell运行fg程序,fg程序给挂起的进程组发送继续信号(SIGCONT)给进程组,进程组内全部进程又到前台来执行,可以看到fg程序是会话中的一个进程,一个会话的真正作用是管理一个用户的进程。

4. 头文件。

内核包含对用户级应用程序有意义的头文件,被认为是一种糟糕的形势,所以如果应用程序和内核都要使用同一定义,那么就将有关信息放在内核头文件中,然后用户级头文件再包括用户级头文件。于是,linux将信号定义在<bits/signum.h>中。

5. 作业控制shell

支持作业控制的shell在运行一个作业的时候,会创建一个前台进程组(tcsetpgrp),shell进程转入后台,当前台进程结束(waitpid)后,shell会重新转入前台执行(tcsetpgrp),如果shell启动的是一个后台作业,则不切换shell进入后台,不等待作业的完成。

6. SIGHUP

终端检测到一个连接断开,则将此信号发送给终端的控制进程(会话首进程),当终端的本地标志位(CLOCAL)没设置时,才产生此信号,这说明如果有一个远程登录断开连接,则会将远程登录的整个会话给终止掉, 包括前台进程组和后台进程组若父进程退出导致进程组成为孤儿进程组,且该进程组中有进程处于停止状态(收到SIGSTOP或SIGTSTP信号),该信号会被发送到该进程组中的每一个进程。通常用此信号通知守护进程,以重新读取他们的配置文件,理由是:守护进程不会有控制终端,而且通常不会收到这种信号。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值