前后台进程详细解释:
操作系统中,前台进程和后台进程有什么区别?特征是什么?
后台程序基本上不和用户交互,优先级别稍微低一点
前台的程序和用户交互,需要较高的响应速度,优先级别稍微高一点
直接从后台手工启动一个进程用得比较少一些,除非是该进程甚为耗时,且用户也不急着需要结果的时候。假设用户要启动一个需要长时间运行的格式化文本文件的进程。为了不使整个shell在格式化过程中都处于“瘫痪”状态,从后台启动这个进程是明智的选择。
LINUX后台进程与前台进程的区别
LINUX后台进程也叫守护进程(Daemon),是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
一般用作系统服务,可以用crontab提交,编辑或者删除相应得作业。
守护的意思就是不受终端控制。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。
前台进程就是用户使用的有控制终端的进程
shell下,进程的前台与后台运行
跟系统任务相关的几个命令:fg、bg、jobs、&、ctrl+z
- & 最经常被用到
这个用在一个命令的最后,可以把这个命令放到后台执行 - ctrl + z
可以将一个正在前台执行的命令放到后台,并且暂停 - jobs
查看当前有多少在后台运行的命令 - fg
将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid) - bg 将一个在后台暂停的命令,变成继续执行
如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid) - jobs列举出后台作业信息。([作业号] 运行状态 作业名称)
- ctrl+z 将任务放到后台去,并暂停;
- bg <%int> 将后台任务唤醒,在后台运行;
- fg <%int> 将后任务的程序放到前台;
- ctrl+z 将任务放到后台去,并暂停.
主进程waitpid(pid,&status,WUNTRACED)时,子进程
退出时,父进程被唤醒 - 将后台任务唤醒,在后台运行;
kill(pid,SIGCONT); - 将后台运行的程序放到前台;
kill(pid,SIGCONT);
waitpid(pid,&status,WUNTRACED);
//可见,后台运行与前台运行的区别只在于前台运行等待子进程的退出而阻塞父进程操作。而后台运行时,可以在父进程中输入命令继续其他操作。本质上没有区别,都是给子进程发送SIGCONT信号。
nohup : nohangup 不挂起,表示终端结束后程序继续执行,常常与&配合使用,&放在最后表示转后台运行程序。
学习线程中涉及类相关知识:https://www.runoob.com/java/java-inheritance.html
函数式接口:
线程的5个状态:创建,就绪,阻塞,运行,死亡。
线程礼让yield(退出重新比赛)和线程强制执行join(插队)
观测线程状态:thread.state
守护线程:thread.setdaemon
并发:多个线程访问同一个对象。线程同步就是一种等待机制;多个需要访问这个对象的线程进入此对象的等待池,这个等待池称为队列。
队列和锁都是针对对象的,每个对象都一把锁,将对象想象成厕所,队列相当于排队上厕所的人,锁相当于是厕所的门锁。线程+锁解决线程不安全的问题,也是解决线程不同步的问题。
死锁:多个线程互相占有对方需要的资源,形成僵持。 比如 两个小孩,一个拿着遥控车(锁),另一个拿着遥控车的遥控器(锁),他们都在等待对方的玩具,形成了僵持。
线程间通信:在实际中除了需要线程同步,还需要线程之间完成通信,来实现对象的高效利用。比如生产者消费者模式:生产者及时生产信息并通知消费者,消费者及时消费信息并通知生产者。
线程通信的方法:管程法(创建一个中间缓冲区存放信息);信号灯法(创建一个标志位相当于信息信号灯)。
线程池:提前创建好多个线程,并放入线程池,使用时直接获取线程,使用后放回线程池。可以避免频繁创建销毁,实现重复利用。
学习线程知识视频链接:狂神讲线程。
https://www.bilibili.com/video/BV1V4411p7EF?p=28&spm_id_from=pageDriver