后台程序基本上不和用户交互,优先级别稍微低一点;前台的程序和用户交互,需要较高的响应速度,优先级别稍微高一点。
直接从后台手工启动一个进程用得比较少一些,除非是该进程甚为耗时,且用户也不急着需要结果的时候。假设用户要启动一个需要长时间运行的格式化文本文件的进程。为了不使整个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);
可见,后台运行与前台运行的区别只在于前台运行等待子进程的退出而阻塞父进程操作。而后台运行时,可以在父进程中输入命令继续其他操作。