shell编程笔记(二)

SUID和SGID(针对可执行程序)

这两个属于附加权限位,这两个附加权限通过设置用户ID位(SUID)设置组ID位(SGID)的机制来赋给程序
当你执行了一个设置了SUID位的程序时,你就继承了该程序的属主的权限,当你执行了一个设置了SGID位的程序,你就继承了该程序所属用户组的权限
这里写图片描述
可以看到passwd程序的SUID位被激活

进程相关

前台进程和后台进程

所谓前台进程就是需要占用终端的进程,在该前台进程执行过程中你是无法进行任何输入的
后台进程和前台进程正好相反,他不占用终端,你可以在该后台进程执行过程中,继续进行其他的操作,比如我们可以把ls进程放到后台来执行:

ls &

这里写图片描述
此时我们可以正常进行其他的输入,后台进程执行完毕后会自动把结果输出到终端界面上
在上面的图片中,我们可以看到第一行输出[1] 5809,这个shell分配给进程的任务标识符,也就是pid

前后台进程的切换

前面的示例我们用的都是bash,下面我们用sh来进行演示,我们先来写一段这样的脚本:
read.sh

#!/bin/sh
read LINE
read $LINE 

我们令这段脚在后台运行:

/bin/sh read.sh &

它在后台运行的时候是需要输入的,但是我们又没办法对他输入,
Unix环境下,当一个进程以后台形式启动,但尝试去读写控制台终端时,将会触发SIGTTIN(读)和SIGTTOU(写)信号量
此时不管我们输入什么,都会触发SIGTTIN信号,导致程序中止:
这里写图片描述
解决此问题有两种方式,一种就是将进程切换至前台,另一种就是通过重定向的方式来运行该程序
先看一下重定向的方式:
这里写图片描述
下面说一下如何切换前后台进程
我们在上面使用&来运行一个后台程序,其实除了这种方式,我们还可以切换一个前台进程到后台来运行,这里要介绍一下悬挂所谓悬挂,就是暂停前台进程,让其处于等待状态,在UNIX中,使用ctrl + Z来悬挂前台进程,使用stty命令来查看:
这里写图片描述
bg(background)命令和fg(frontground)命令
当一个前台进程被悬挂起来的时候,使用bg命令可以在后台继续运行这段前台进程,使用fg命令可以再前台运行它
暂时没太用明白这两个命令,以后再更吧

nohup命令

该命令可以保持进程在其所运行的终端关闭之后仍然不会被终止,具体使用方法为:

“`
nohup cmd &

缺省状态下nohup命令会自动将cmd的输出重定向到nohup.out文件

等待后台进程结束(wait命令)

在正常情况下,后台进程运行的时候我们是可以在终端中进行输入的,不过我们可以强制等待后台进程,意思就是直到后台进程结束之后,我们才能进行输入,要达到这一目的,需要使用wait命令

父子进程

猜你喜欢

转载自blog.csdn.net/include_heqile/article/details/80258705