Linux Shell下的后台运行及其前台的转换

当用bash启动一个程序,你可以用在程序后加&,实现程序在后台运行;

例如: emacs &

但如果你忘了输入&;但你又不想把程序停止后重新启动;

你可以这么做:

按Ctrl + Z暂停前台工作,比如前面提到的Emacs;

然后用jobs命令查看当前bash一共启动了多少程序,你可以看到你的emacs在其中,它的状态是Stoped的; 并且它的jobID也可以看,比如是2

然后用命令bg 2

这样你就可以达到和emacs &一样的效果了。

当你有些工作比如updatedb, find等需要一定时间,这些工作可以考虑让它在后台运行,而你可以用bash做其它工作。

如果需要把任务回到前台,只需要fg 2。

=====================================================================================

A,Shell支持作用控制,有以下命令:
1. command& 让进程在后台运行
2. jobs 查看后台运行的进程
3. fg %n 让后台运行的进程n到前台来
4. bg %n 让进程n到后台去;   
  PS:"n"为jobs查看到的进程编号.

B.下列转:http://blog.chinaunix.net/u/1604/showart_1079559.html

fg、bg、jobs、&、ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的
一。& 最经常被用到
这个用在一个命令的最后,可以把这个命令放到后台执行
二。ctrl + z
可以将一个正在前台执行的命令放到后台,并且暂停
三。jobs
查看当前有多少在后台运行的命令
四。fg
将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
五。bg
将一个在后台暂停的命令,变成继续执行
如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

#Linux下使用Shell命令控制任务Jobs执行

下列命令可以用来操纵进程任务:
  ps 列出系统中正在运行的进程;
  kill 发送信号给一个或多个进程(经常用来杀死一个进程);
  jobs 列出当前shell环境中已启动的任务状态,若未指定jobsid,则显示所有活动的任务状态信息;如果报告了一个任务的终止(即任务的状态被标记为Terminated),shell 从当前的shell环境已知的列表中删除任务的进程标识;
  bg 将进程搬到后台运行(Background);
  fg 将进程搬到前台运行(Foreground);

  将job转移到后台运行
  如果你经常在X图形下工作,你可能有这样的经历:通过终端命令运行一个GUI程序,GUI界面出来了,但是你的终端还停留在原地,你不能在shell中继续执行其他命令了,除非将GUI程序关掉。

  为了使程序执行后终端还能继续接受命令,你可以将进程移到后台运行,使用如下命令运行程序: #假设要运行xmms

  $xmms &

  这样打开xmms后,终端的提示又回来了。现在xmms在后台运行着呢;但万一你运行程序时忘记使用“&”了,又不想重新执行;你可以先使用ctrl+z挂起程序,然后敲入bg命令,这样程序就在后台继续运行了。

  概念:当前任务

  如果后台的任务号有2个,[1],[2];如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码“[2]”的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时,如果不加任何引号,则所变动的均是当前任务。

  察看jobs
  使用jobs或ps命令可以察看正在执行的jobs。

  jobs命令执行的结果,+表示是一个当前的作业,减号表是是一个当前作业之后的一个作业,jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息;

  进程的挂起

  后台进程的挂起:

  在solaris中通过stop命令执行,通过jobs命令查看job号(假设为num),然后执行stop %num;

  在redhat中,不存在stop命令,可通过执行命令kill -stop PID,将进程挂起;

  当要重新执行当前被挂起的任务时,通过bg %num 即可将挂起的job的状态由stopped改为running,仍在后台执行;当需要改为在前台执行时,执行命令fg %num即可;

  前台进程的挂起:

  ctrl+Z;

  进程的终止

  后台进程的终止:
  方法一:
  通过jobs命令查看job号(假设为num),然后执行kill %num

  方法二:
  通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid

  前台进程的终止:

  ctrl+c

  kill的其他作用
  kill除了可以终止进程,还能给进程发送其它信号,使用kill -l 可以察看kill支持的信号。

  SIGTERM是不带参数时kill发送的信号,意思是要进程终止运行,但执行与否还得看进程是否支持。如果进程还没有终止,可以使用kill -SIGKILL pid,这是由内核来终止进程,进程不能监听这个信号。

Linux Shell下的后台运行及其前台的转换

时间: 2024-11-14 03:18:06

Linux Shell下的后台运行及其前台的转换的相关文章

Linux系统下程序后台运行nohup,&,screen等

"nohup" 在用户ssh终端断开或者网络端口时,终端没有HUP信号则会关闭所有子进程. nohup则会让进程忽略HUP信号,不受终端断开限制 一般在结尾加上"&"将命令同时放到中断后台运行 nohup标准输出和标准错误输出会被重定向到nohup.out文件中 [[email protected] ~]# nohup ping www.ibm.com & [1] 3059 nohup: appending output to `nohup.out'

linux shell 创建并发后台执行任务并等待任务执行完成

#!/bin/bash echo "i am main" for i in $(seq 1 5) do { sleep 10; echo "i am $i"; }& done wait http://www.cnblogs.com/dorothychai/archive/2012/10/19/2730374.html linux shell 创建并发后台执行任务并等待任务执行完成

linux使脚本在后台运行

一.为什么要使程序在后台执行 我们计算的程序都是周期很长的,通常要几个小时甚至一个星期.我们用的环境是用putty远程连接到日本Linux服务器.所以使程序在后台跑有以下三个好处: 1:我们这边是否关机不影响日本那边的程序运行.(不会像以前那样,我们这网络一断开,或一关机,程序就断掉或找不到数据,跑了几天的程序只能重头再来,很是烦恼) 2:不影响计算效率 2:让程序在后台跑后,不会占据终端,我们可以用终端做别的事情. 二.怎么样使程序在后台执行 方法有很多,这里主要列举两种.假如我们有程序pso

linux 让程序在后台运行的几种可靠方法

我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败.如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题. 先介绍一下hangup 名称的来由 在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯.当用户 logout 时,modem 就会挂断(hang up)电话. 同理,当 modem 断开连接时,就

linux上jar包后台运行的方法

我用的远程主机,客户端用的是secrueCRT 假如要在linux后台运行的程序是abc.jar 命令:nohup java -jar abc.jar & 运行shell脚本的话,命令nohup *.sh & 如果让程序始终在后台执行,即使关闭当前的终端也执行(java -jar abc.jar &不行),这时候需要nohup.该命令可以在你退出帐户/关闭终端之后继续运行相应的进程.关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps -aux(进程查看命令).

Linux:让进程在后台运行

学习之余我最大的乐趣是找一部不错的电影慢慢品味,这也是我缓解压力的最好方式之一,由于我常去的字幕组网站需要签到才可以下载字幕,像这种娱乐网站谁有时间天天记得去签到呢,but作为一个准程序猿应该有更好的办法.果然我在github上逛了逛,便发现的一个不错的签到脚本,看来很多人都着和我一样的刚需呀,这里附上地址. 一动手很多问题便接踵而至,我打算把这个脚本运行在我的腾讯云服务器上面,并且定一个时间,让它每天在固定的时间run.可是我用的ssh 登录的远程Linux 服务器,如果直接按照那脚步的API

linux必会命令 - 后台运行程序 - nohup、&

在Linux中,让某个程序在后台运行我们通常会用 & 在程序结尾来让程序自动后台运行. 比如我们要在后台运行某个Java项目: java -Xms512M -Xmx512M -Xmn200m -Xss4m -jar  project.jar  &. 可是有很多程序并不像Java一样,&对有些程序不起作用,这时我们改用nohup命令即可: nohup java -Xms512M -Xmx512M -Xmn200m -Xss4m -jar  project.jar . 原文地址:htt

Linux安装Redis、后台运行、系统自启动

Redis是用C语言编写的开源免费的高性能的分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库. 安装 1)从官网http://download.redis.io/releases/下载redis压缩包,如redis-5.0.3.tar.gz 2)上传Linux服务器目录opt,解压文件包 tar -zxvf redis-5.0.3.tar.gz,文件夹名称 redis-5.0.3 3)剪切目录  mv  redis-5.0.3  /usr/local/redis  进入文件夹目录,执

linux中mongodb在后台运行进程

# 方法1:(推荐)# --fork 选项将会通知 mongod 在后台运行/path/to/MongoDB_Dir/bin/mongod --logpath /path/to/file.log --logappend --fork # 方法2:# 将输出重定向到 file.log 文件# & 将该进程置于后台运行/path/to/MongoDB_Dir/bin/mongod >> /path/to/file.log & # 还可以这样运行(不记录日志)# 因为所有重定向到位桶