shell下,进程的前台与后台运行

跟系统任务相关的几个命令:fg、bg、jobs、&、ctrl+z
1. &
最经常被用到
   这个用在一个命令的最后,可以把这个命令放到后台执行
2. ctrl +
z
     可以将一个正在前台执行的命令放到后台,并且暂停
3.
jobs
     查看当前有多少在后台运行的命令
4.
fg
     将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg
%jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

5. bg 将一个在后台暂停的命令,变成继续执行

如果后台中有多个命令,可以用bg
%jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
1.
jobs列举出后台作业信息。([作业号]   运行状态   作业名称)
2. ctrl+z
将任务放到后台去,并暂停;
3. bg <%int> 将后台任务唤醒,在后台运行;
4.
fg   <%int> 将后任务的程序放到前台;

1. ctrl+z
将任务放到后台去,并暂停.
     主进程waitpid(pid,&status,WUNTRACED)时,子进程
     退出时,父进程被唤醒

2.
将后台任务唤醒,在后台运行;
     kill(pid,SIGCONT);

3.
将后台运行的程序放到前台;
     kill(pid,SIGCONT);  
     waitpid(pid,&status,WUNTRACED);

void fg(char *p)
{
    int pid=0;
    if(p!=NULL)
    {
         pid=atol(p);
        kill(pid,SIGSTOP);
        kill(pid,SIGCONT);
         waitpid(pid,NULL,NULL);
         pid_jobs[jobs_num--]=0;
    }
    else
    printf("error
\n");
    return 0;
}    

void bg(char *p)  
{
    int pid=0;
    if(p!=NULL)
    {
     pid=atol(p);
    kill(pid,SIGCONT);
     pid_jobs[jobs_num--]=0;
    }
    else
    printf("error
\n");
    return 0;
}    
//可见,后台运行与前台运行的区别只在于前台运行等待子进程的退出而阻塞父进程操作。而后台运行时,可以在父进程中输入命令继续其他操作。本质上没有区别,都是给子进程发送SIGCONT信号。

http://blog.chinaunix.net/u3/94039/showart_1893558.html

---------------------------

1. 解释程序前台运行与后台运行的区别?

答:前台程序与用户直接对话;后台程序则间接地为前台程序提供支持,一般来说是为前台程序提供所需要的资源。后台程序既可以直接与前台程序进行对话,也可以使用中间程序作为媒介。通常把用户正在操作的程序称为前台程序,而用户没有操作但也在运行的程序(如系统服务)称为后台程序.

命令解释程序创建一个后台进程时,它在发出此进程命令后,

并在接收其他命令之前,不用等待这个进程结束。

例如:

$ddd &

而前台就要等待,直到进程结束为止。

例如:

$ddd

Ctrl-C就结束ddd。

前台程序和终端关联,后台程序不受终端控制。

广义上说,前台程序/后台程序并不是一个很明确的概念。如果是C/S结构,通常把客户端的程序看做前台程序,而服务器端程序看做后台程序。现在的操作系统都是多任务的操作系统,可以同时执行多个程序。前台程序就是你当前正在使用的程序,后台程序就是你开启了以后没有使用但仍在运行的程序。

时间: 2024-10-01 02:52:22

shell下,进程的前台与后台运行的相关文章

Linux下优雅的让程序后台运行

假设在终端上启动运行了一个程序,跑了几天,如果不小心把terminal关了,那么程序就会终止,这是SIGHUP信号的原因,即使通过bg置为后台运行同样会如此,应该让程序成为一个daemon,步骤如下: 1.Ctrl+z 暂停程序的运行,可以看到程序的作业号,假设为1: 2.bg %1 置为后台运行: 3. disown -h %1 使其不受终端关闭的影响. => The disown command on ksh shell causes the shell not to send a HUP

Python3判断shell下进程是否存在&amp;&amp;启动&amp;&amp;邮件通知

判断进程是否存在 def isRunning(process_name): try: process = len(os.popen('ps aux | grep "' + process_name + '" | grep -v grep').readlines()) if process >= 1: return True else: return False except: print("Check process ERROR!!!") return Fal

linux下如何让控制台程序后台运行

方法1:./test & 方法2:(./test &) 方法3:nohup 和bg 方法4:screen -mS test /root/test   退出程序需要手动进入screen创建的test虚拟终端去退出 方法5:修改并保存一下代码为脚本,运行 #!/bin/bash NAME=$(basename "$0") PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/roo

Linux 进程后台运行

Linux 进程后台运行 1.进程在当前终端后台运行.(关闭终端后进程自动退出) sh test.sh & 注:运行进程后跟 "&" 2.进程长期后台运行不受终端关闭影响. nohup sh test.sh & 注:使用nohup 命令配合 & 实现. Linux 后台进程管理命令 ctrl+z把前台的进程放入后台,并stop. #查看后台进程. 命令:job -s #控制台后台睡眠500秒."&"后台执行. 命令:sleep

【Linux探索之旅】第三部分第四课:后台运行及合并多个终端

内容简介 1.第三部分第四课:后台运行及合并多个终端 2.第三部分第五课预告:延时执行,唯慢不破 后台运行及合并多个终端 上一课(<[Linux探索之旅]第三部分第三课:监视系统活动,滴水不漏>)中,我们简单介绍了进程,也学习了如何列出系统中的进程,如何过滤列表结果,还有如何结束进程. 这一课我们继续乘胜追击,一路向北,来学习进程的后台运行. 我们使用的终端让我们难免有一种感觉:我们每次只能在一个终端中运行一个进程.但其实这是大错特错的. 终端还可以运行后台进程.要使进程一个在后台运行,有几种

Linux之nohup命令:实现退出终端后程序继续后台运行

转自:http://tech.ccidnet.com/art/302/20070618/1115599_1.html 简单而有用的nohup命令在UNIX/LINUX中,普通进程用&符号放到后台运行,如果启动该程序的控制台logout,则该进程随即终止. 要实现守护进程,一种方法是按守护进程的规则去编程(本站有文章介绍过),比较麻烦:另一种方法是仍然用普通方法编程,然后用nohup命令启动程序: nohup<程序名>& 则控制台logout后,进程仍然继续运行,起到守护进程的作

linux 后台运行nohup &amp; ctrl+z

使用Linux时,经常希望有些命令结果不在前台显示,如sh脚本,耗时的命令等.一般情况下,使用 & 将命令结果后台运行,如sh test.sh,脚本后台执行. 有时候命令已经在前台执行了,需要将其切换到后台可以使用, ctrl+z ,但是该命令切换到后台会处于暂停状态,可以配合 jobs 进一步处理后台的命令(进程). 更极端的情况是 有些命令需要占用很长的时间却又不能间断,如下载...,这时候需要 nohup (ignoring hangup signals) 忽略挂起信号一直在后台执行. 比

让程序在linux后台运行的方法

常见用法: nohup ./Thriftc & > /dev/null & 在linux后台运行Thriftc程序,并将其输出重定向到空设备:/dev/null,也就是将程序输出全部丢弃. nohup COMMAND > out.log 2>&1 & 在linux后台运行COMMAND命令,将标准输出重定向到out.log文件,标准错误也重定向到out.log文件(标准错误重定向到标准输出,再将标准输出重定向到out.log). 上边的示例涉及到两个命令:

Android 应用按返回键退向后台运行

Android应用开发按下返回键退向后台运行 我们日常使用的很多Android应用(如QQ.微信.微博),在应用的主界面按下返回键,应用并没有退出,而是进入后台运行. 那么,开发中是如何实现的呢?我找到了两种方法: 一.监测返回键 1.在Activity中重写onBackPressed()方法. @Override public void onBackPressed() { //此处写退向后台的处理 } 1 2 3 4 1 2 3 4 2.重写onKeyDown()方法(有的应用提示再次点击返回