标签:
进程(process):程序被触发后,执行者的权限与属性、程序的程序代码与所需数据等都会被加载到内存中,操作系统并给予这个内存内的单元一个标识符(PID),也就是说:进程就是一个正在运行的程序。
父子进程
jack@ubuntu:~$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 【7261】 7253 0 80 0 - 7083 wait pts/0 00:00:00 bash
0 T 1000 16097 【7261】 0 80 0 - 14574 signal pts/0 00:00:00 vim
0 R 1000 17246 【7261】 0 80 0 - 3484 - pts/0 00:00:00 ps
//可以看到, bash为父进程 PID为7261, 在这个bash中执行的 `ps`命令为bash的子进程。`wait`表示上图的虚线,bash睡着了。
//F:代表进程标识(process flags),说明进程的权限。4 means “权限为root”, and 1 means “forked but didn‘t exec”, 0 means that neither flag applies. 0 always means that none of the flags are set.
//S:表示基础的状态:R-Running;S-Sleep;T-stop;Z-Zombie;D-不可被幻想的睡眠状态,通常为等待I/O。
系统先以fork的方式复制一个与进程相同的暂存进程,这个进程与父进程唯一的区别就是PID不同!但是这个暂存进程还会多一个PPID的参数。然后暂存进程开始以exec的方式加载实际要执行的程序,以上述图示来讲,新的进程名为qqq,最终子进程的程序代码就会变成qqq了。
系统或网络服务:常驻在内存的进程
linux的多用户,多任务环境
jack@ubuntu:~$ adduser username // 添加用户
多任务: 一个进程可以看做是一个任务,一个时间点只有一个进程再CPU上运行。但是得益于CUP的高达几个GHz的运作,在CUP的调度机制下,即使是多人同时登陆系统时,也会感觉整台主机好像只为自己一个人服务。这就是多用户,多任务的环境。
多重登陆环境的七个基本终端界面
在linux中,默认提供了6个命令行界面登陆窗口和一个图形界面。使用[Alt]+[F1]~[F7]切换不同的终端机接口,并且每个终端机接口还可以是不同的人(利用adduser添加用户)。
特殊进程管理行为:如果tty1中的程序卡死了,可以切换到tty2,通过PID,用kill
命令结束结束卡死的进程,在回到tty1
如何在tty1的bash进程中工作呢?,例:
jack@ubuntu:~$ cp file1 file2 &
重点在&
,把当前的进程放在后台运行,依旧是在执行这个命令之后,在这一bash任然可以继续干其他操作,如vim编辑文本。
接下来我们重点看一下job control。
job control:当我们登录系统取得bash shell之后,在单一终端机下同时进行多个工作的行为管理。如:我们登陆bash后,想要一边复制,一边进行数据查找,一遍vim编程,并且在一个bash内实现,不用通过不同tty的切换,不用在图形界面打开不同的bash。
//使用过IntelliJ的都知道,在运行`idea.sh`命令之后,会持续的输出相关内容,此时bash就不能在进行其他操作了,此时我们就可以通过job control把它放到后台运行。此处还需要使用输出重定向,把输出放到其他文件中,避免后台运行的输出跑到当前bash中。
// > :不存在文件就新建文件,存在则覆盖存在的文件。 #重定向#
// >> : 不存在文件就新建文件,存在则输出添加进文件。
jack@ubuntu:~$ idea.sh > ideash.out &
[1] 15705
jack@ubuntu:~$ jobs -l //查看后台的程序
[1]+ 15705 Running idea.sh > ideash.out &
//再打开vim 编辑文件 ,[ctrl] + [z]暂停程序
jack@ubuntu:~$ vim ideash.out
[2]+ Stopped vim ideash.out
jack@ubuntu:~$ jobs -l
[1]- 15705 Running idea.sh > ideash.out &
[2]+ 16097 Stopped vim ideash.out
//[1]:表示job number 为 1
//+:表示最近一个被丢到后台的工作。 - :表示倒数第二个被丢到后台的工作 。 之后的工作就不显示了
//15705:代表PID
// Running:工作的状态
//idea.sh > ideash.out & :执行的命令
jack@ubuntu:~$ fg %2 //回到job 2 继续通过vim编辑。
jack@ubuntu:~$ bg %jobnumbers // 让处于stop的job在后台运行。
// 1:类似于reload #signal#
// 9:强制关闭
// 15:正常关闭, 默认值
jack@ubuntu:~$ kill %1 //kill -signal %jobnumbers 管理后台进程
jack@ubuntu:~$ [ 919305] WARN - api.vfs.impl.local.FileWatcher - Watcher terminated with exit code 143
^C
[1]- Terminated idea.sh > ideash.out
jack@ubuntu:~$ jobs
[2]+ Stopped vim ideash.out
nohup
可以达到把任务房到系统后台中去。jack@ubuntu:~$ nohup idea.sh & // 默认输出到nohup.out,相当于nohup idea.sh & >> nohup.out
>ps -l //显示当前进程
>ps aux //显示系统所有进程
>kill -signal PID //管理进程,signal同上,
难免有疏忽之处,如有问题请留言!
标签:
原文地址:http://blog.csdn.net/qq_24145735/article/details/51888270