After completing this unit, you should be able to:
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。 实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
$ echo $$
进程是程序的一个具体实现。进程是执行程序的过程,同一个程序可以执行多次,每次都可以在内存中开辟独立的空间来装载,从而产生多个进程。不同的进程还可以拥有各自独立的IO接口。
$ ls –l
bash
is the parent, ls
is the child. 操作系统需要有一种方式来确定所有必须的进程都存在。在通用的系统中有四种原因导致创建进程: 1)系统初始化 2)执行了从事创建进程的一个系统周期,该系统调用被正在运行的进程所调用 3)用户请求创建一个进程 4)一个批处理作业的初始化 上一节已经说明进程终止方式。多数进程是由于完成了它们的工作而终止。当编译器完成了所给定程序的编译之后,编译器执行一个系统调用,通知操作系统它的工作已经完成。
$ echo $$ # parent shell's pid
$ bash
### in child shell ###
$ echo $$ # child shell's pid
$ date
$ exit
### return to parent shell ###
$ echo $$ # parent shell's pid
而在Linux系统中,只能一个系统调用可以用来创建新进程,使用fork()函数来创建一个进程。在调用了fork()后,这两个进程拥有相同的存储映像、同样的环境字符串和同样的打开文件。进程创建之后,父进程和子进程都有各自不同的地址空间。如果其中某个进程在其地址空间修改一个字,这个修改对其他进程而言是不可见的。
The ps command displays process status information.
ps supports a large number of options; you typically use :
ps aux
a: All processes attached to a terminal
x: All other processes
u: Provides more columns
Another common usage for ps:
ps -ef
监控系统的各方面的性能,保障各类服务的有序运行,是运维工作的重要组成部分,下面是一些常用的系统监控命令。 具体包含以下几个部分: 1、进程管理基础 2、进程管理类工具(ps、top、htop、kill) 3、内存监控类工具(vmstat、pmap) 4、系统监控类工具(glances、dstat)
Foreground processes
$ find / -name README
Background processes
$ find / -name README &
& 放在启动参数后面表示设置此进程为后台进程 默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个'&'实现这个目的。
jobs
: Lists background or suspended jobs
For foreground:
<ctrl-z>
: Suspends foreground task
<ctrl-c>
: Terminate this task
For background:
fg
: Put the task to the foreground
For suspended:
fg
: Resumes suspended task in the foreground
bg
: Resumes suspended task in the background
For all:
kill
: Terminate or kill the task.
Specify a job number for bg, fg, and kill using %job
在自己的bash中,如果有多个工作需要处理,就需要进行job control,把其中一些工作可以放进背景中。 直接将指令放到背景中执行 :& 将目前的工作放到背景中暂停:ctrl+z 观察目前背景工作状态:jobs [-l (job number,PID) -r (run) -s (stop)] 将背景工作拿到前景来处理:fg %jobnumber 让工作在背景下的状态变成运行状态:bg %jobnumber 管理北京当中的工作:kill -signal %jobnumber 查看signal使用kill -l 脱机管理问题:以上的工作,是与终端有关的。
Job的几种切换状态、
kill格式为kill -signal %jobnumber 注意:这里的kill也可以结束进程,区别在于如果不加%直接接一个数字,那么毁直接kill掉PID为该数字的进程 signal代表一个信号,通常进程之间可以互相控制的,比如你可以关闭,或者重新启动软件。那么程序是如何互相管理的呢? 其实就是通过给予该进程一个信号(signal)去告知进程让它做什么。 'kill %1'中的'%'告诉系统,后面的数字是一个job number。默认情况下,kill将会向程序发送一个termination signal(-TERM)。如果这个信号不起作用,考虑使用'kill -kill %job number'来发送一个kill signal(-KILL)。 'kill'命令的使用,就看man把,info也可以。常用的也就'kill %job number'、'kill -kill %job number'、'kill [-kill] PID'。
The nohup command stops a process from being killed if you log off from the system before it completes by intercepting and ignoring the SIGHUP and SIGINTR (hangup and interrupt) signals and redirecting STDOUT and STDERR to a file.
$ nohup find / -name README &
nohup: appending output to `nohup.out´
$ logout
使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行。nohup命令可以在你退出帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)
Processes are scheduled according to priority.
The nice command is used to start a process with a user-defined priority.
nice [-n <value>] <original command>
The renice command is used to change the priority of a currently running process.
renice <new_value> <PID>
The word daemon refers to a never-ending process, usually a system process, that controls a system resource, such as the printer queue, or performs a network service.
先简单介绍下是服务(service)。Linux系统可以提供很多系统或网络功能(例如http,ftp,mysql等),提供这些功能当然需要运行一些程序,这些运行的程序我们称为进程,也就是说系统中运行的进程提供了功能,这些进程就是服务。例如:提供了http功能的进程就是http服务。 服务可以说是某一进程,而进程是需要程序去运行产生,也就是说程序运行提供某种服务,这些程序就称为daemon。简单地说,daemon是静态的,就是某一程序,daemon运行后会提供某种服务,服务是动态的,是程序运行产生的进程。但通常情况下我们不需要是详细区分daemon和服务,可以将两者理解为等同,即daemon就是服务。(通常说的Linux守护进程就是指daemon或者服务)
有些工作需要周而复始的工作,有些任务需要在某个特定的时间启动工作,这就可以通过crontab来进行设置
0 8 * * * Once_a_day
0,30 9 * * * Twice_a_day
0,30 8-18 * * * Twenty_Two_times_a_day
*/5 * * * * Every_five_minutes
12 13 1 * * Once_a_month
49 23 16 9 * Once_a_year
0 15 * * 1 Every_monday
1 1 1 1 1 ??? (caveat!)
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。 cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务: /sbin/service crond status //查看服务当前状态 /sbin/service crond start //启动服务 /sbin/service crond stop //关闭服务 /sbin/service crond restart //重启服务 /sbin/service crond reload //重新载入配置
你也可以将这个服务在系统启动的时候自动启动: 在/etc/rc.d/rc.local这个脚本的末尾加上:/sbin/service crond start 现在cron这个服务已经在进程里面了,我们就可以用这个服务了.
At runs a command once in the future
# at 4am
ps aux
^d (CTRL+D)
# at -f bshfile 16:00 + 3 days
# echo "mail -s report < rep.txt boss" | at now +2min
To control at jobs, you can also use atq (or at -l) to list all jobs and atrm (or at -r) to delete a given job.
at命令用于在指定时间执行命令。at允许使用一套相当复杂的指定时间的方法。它能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。当然也能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的 词语来指定时间。用户还能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。也能够指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面
Table of Contents | t |
---|---|
Exposé | ESC |
Full screen slides | e |
Presenter View | p |
Source Files | s |
Slide Numbers | n |
Toggle screen blanking | b |
Show/hide slide context | c |
Notes | 2 |
Help | h |