Linux shell 进程管理

来源:互联网 发布:网络机顶盒检测 编辑:程序博客网 时间:2024/06/05 15:04

Linux系统和应用程序可以生成超过30个信号。

信号 值 描述 1 SIGHUP 挂起进程 2 SIGINT 终止进程 3 SIGQUIT 停止进程 9 SIGKILL 无条件终止进程 15 SIGTERM 尽可能终止进程 17 SIGSTOP 无条件停止进程,但不是终止进程 18 SIGTSTP 停止或暂停进程,但不终止进程 19 SIGCONT 继续运行停止的进程

快捷键
Ctrl+C 中断进程
Ctrl+C组合键会发送 SIGINT 信号
Ctrl+Z 展厅进程
Ctrl+Z组合键会生成一个 SIGTSTP 信号

方括号中的数字是shell分配的作业号 (job number),shell将shell中运行的每个进程称为作业,并为每个作业分配唯一的作业号。它会给第一个作业分配作业号1,第二个作业号2,以此类推。
如果你的shell会话中有一个已停止的作业,在退出shell时,bash会提醒你。

捕获信号 trap

控制台后台运行脚本
当 & 符放到命令后时,它会将命令和bash shell分离开来,将命令作为系统中的一个独立的后台进程运行。显示的第一行是:
[1] 3231
方括号中的数字是shell分配给后台进程的作业号。下一个数是Linux系统分配给进程的进程ID(PID)。
如果终端会话退出,那么后台进程也会随之退出。
非控制台下运行脚本
nohup
nohup 命令运行了另外一个命令来阻断所有发送给该进程的 SIGHUP 信号。这会在退出终端会话时阻止进程退出。
由于 nohup 命令会解除终端与进程的关联,进程也就不再同 STDOUT 和 STDERR 联系在一起。为了保存该命令产生的输出, nohup 命令会自动将 STDOUT 和 STDERR 的消息重定向到一个名为nohup.out的文件中。

作业控制 jobs

参数 描述 -l 列出进程的PID以及作业号 -n 只列出上次shell发出的通知后改变了状态的作业 -p 只列出作业的PID -r 只列出运行中的作业 -s 只列出已停止的作业

带加号的作业会被当做默认作业。在使用作业控制命令时,如果未在命令行指定任何作业号,该作业会被当成作业控制命令的操作对象。当前的默认作业完成处理后,带减号的作业成为下一个默认作业。任何时候都只有一个带加号的作业和一个带减号的作业,不管shell中有多少个正在运行的作业。

要以后台模式重启一个作业,可用 bg 命令加上作业号。fg是前台启用

调整谦让度
在多任务操作系统中(Linux就是),内核负责将CPU时间分配给系统上运行的每个进程。调度优先级(scheduling priority)是内核分配给进程的CPU时间(相对于其他进程)。在Linux系统中,由shell启动的所有进程的调度优先级默认都是相同的。
调度优先级是个整数值,从20(最高优先级)到+19(最低优先级)。默认情况下,bash shell以优先级0来启动所有进程。
nice
renice 命令

定时运行作业
at 命令和 cron 表

at 命令会将作业提交到队列中,指定shell何时运行该作业。 at 的守护进程 atd 会以后台模式运行,检查作业队列来运行作业。大多数Linux发行版会在启动时运行此守护进程。
atd 守护进程会检查系统上的一个特殊目录(通常位于/var/spool/at)来获取用 at 命令提交的作业。默认情况下, atd 守护进程会每60秒检查一下这个目录。

at 命令
at [-f filename] time
默认情况下, at 命令会将 STDIN 的输入放到队列中。你可以用 -f 参数来指定用于读取命令(脚本文件)的文件名。
atq 命令可以查看系统中有哪些作业在等待。
就能用 atrm 命令来删除等待中的作业。

cron程序.
min hour dayofmonth month dayofweek command
crontab 命令
如果anacron知道某个作业错过了执行时间,它会尽快运行该作业。

HOME/.bashprofileHOME/.bash_login
$HOME/.profile

参考文献
linux命令汗与shell脚本编程大全

原创粉丝点击