进程、前后台进程、线程
进程,线程,前台和后台进程的解释
进程:
进程是正在执行的一个程序(软件)或者命令,每一个进程都是一个运行的实体都有自己的地址空间,并且占用一定的系统资源。说白了进程就是正在运行着的程序,只要运行就会产生至少一个进程。
只要程序运行就至少会产生一个进程,就是说这个程序是共享的,而并非是同步的,程序可以被多次使用但是互不影响,比如Word创建一个文档,也可以创建多个文档
每一个文档打开并且编辑,就是一个Word进程、电脑扣扣可以打开多次,上不同的号,每一个号之间没有联系,每一个号就是一个进程,所以有多个QQ进程,apache服务,可能被多个客户端使用,为了保证资源的安全,可以为每一个客户端都提供一个服务,所以进程可以有多个。每一个进程占用自己独立的一块内存。
前台进程:
前台进程是当前正在使用的程序,在终端命令行正在执行的进程。
后台进程:
后台进程是在当前没有使用的但是也在运行的进程,包括那些系统隐藏或者没有图形化界面的程序。
Linux中将前台进程挂到后台的意思就是,退出程序但是让这个程序依然进行运行,而不是退出当前程序只能关闭。
特点:
- 前台进程可以自己控制,后台进程由系统进行维护和管理。
- 前台进程和后台进程可以互相转换,
- 由于是后台进程,所以系统会将主要精力放在前台也就是当前进程中,后台进程自然会比较慢。
线程:
线程可以理解为轻量级进程,只不过这线程是属于某个进程的,每个线程是可以独立工作的,在同一个进程中线程和线程之间是共享内存空间的,带来的缺点是,如果一个线程出故障了,可能会影响同一进程中的其他线程。
即这个线程共享这个进程的内存空间和地址空间,不可以分享其他的进程空间,拿QQ来说:QQ给朋友发送一句话就是一个线程,同时我这里来了一条腾讯新闻,又是一个线程,还可能在这个时候,朋友给我发送了一个消息,又是一个线程,可以这么理解,线程是某个进程中的轻轻量级进程。一个进程可以有多个线程(项目组和项目成员的关系)。
前台进程和后台进程的实例理解:
进程一般分为前台进程与后台进程,进程在前台运行时,用户必须要等到该进程结束才能进行别的操作,但是当我们执行一个时间比较久的命令时,不能做别的操作难免有些浪费时间,这时就轮到我们的后台进程发挥作用了,进程在后台运行时无需等待其完成就可以进行其他命令的操作。启动后台运行需要在执行命令的最后加上&符号。
相关命令:fg、bg、kill,jobs、&、nohup、ctrl+z、ctrl+c 命令
1、让进程运行于后台;&,ctrl+z
&:
加在一个命令的最后,可以把这个命令放到后台执行,如
#watch -n3 ls /root & //每3s在后台执行一次#ls /root命令。
ctrl + z:
可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
2、查看当前终端所有后台进程:jobs
jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。
3、进程控制:fg,bg,kill,ctrl+c
fg:#fg [[%]job_num]
将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %job_num(是命令编号,不是进程号)将选中的命令调出。
bg:#bg [[%]job_num]
将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %job_num将选中的命令调出。
kill:#kill [[%]job_nummber]
法子1:通过jobs命令查看job号(假设为num),然后执行kill %job_num
法子2:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid
前台进程的终止:Ctrl+c
4、程序脱离当前终端后依旧后台运行:nohup,screen
后台进程虽然被送往后台执行,但其依然与终端相关;退出终端,该后台程序将被关闭。如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup或screen。
#nohup COMMAND &>/dev/null &
#screen;COMMAND
该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,例如执行test.sh脚本,此时利用ps(进程查看命令)
ps -aux | grep “test.sh” #a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分
例如:进程后台运行:
#nohup 代码& //或#screen;代码&
比方说我要运行一个名字叫verification-0.0.1-SNAPSHOT.jar的jar包,这样打就可以了
#nohup java -jar verification-0.0.1-SNAPSHOT.jar&
#screen; java -jar verification-0.0.1-SNAPSHOT.jar&