`
qindongliang1922
  • 浏览: 2149828 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:116399
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:124662
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:58574
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:70449
社区版块
存档分类
最新评论

Linux后台运行进程的方法

阅读更多
有时候我们在Linux里面,运行一个服务,当服务启动后,我们这个终端,可能就被,这个服务占用了,如果你强制使用Ctrl+C来退出的话,那么很有可能就会把这个服务给停掉,这当然不是我们想要的结果。

所以,这时候就需要一个类似于守护进程的方式,来运行我们的服务,并且,不会影响到我们shell终端的使用,虽然你可以再重新打开一个shell终端,但那样做,并不太符合我们的预期,例如Redis服务启动之后,就会使终端处于阻塞状态,如果强制退出,这个服务就被停掉了。


下面是对Linux下运行与控制后台进程的各种方法的介绍:
1.nohup
顾名思义,nohup的用途就是让提交的命令忽略所有的hangup信号。
使用方法:nohup COMMAND [ARG]...

2.setsid
在一个新的会话中运行命令,从而可以避开当前终端发出的HUP信号。
使用方法:setsid COMMAND [ARG]...

3.&
可以结合()产生一个新的子shell并在这个子shell中将任务放置到后台运行,从而不受当前shell终端的HUP信号影响。
使用方法:(COMMAND [ARG]... &)

而我通常的使用方式为:
nohup ./filename.sh > filename.log 2>&1 &
nohup ./filename.sh &> filename.log &
三点理由:
1)nohup保障进程不会被hangup信号异常中断;
2)将任务放置到后台运行,不占用当前的终端;
3)将错误输出也打印到log中,默认>只有标准输出,错误输出没有。




下面依次来看,这几个命令的使用:


fg、bg、jobs、&、nohup、ctrl + z命令
一、&
加在一个命令的最后,可以把这个命令放到后台执行,如gftp &,
二、ctrl + z
可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行
三、jobs
查看当前有多少在后台运行的命令
jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息;
四、fg
将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
五、bg
将一个在后台暂停的命令,变成继续执行 (在后台执行)
如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
将任务转移到后台运行:
先ctrl + z;再bg,这样进程就被移到后台运行,终端还能继续接受命令。
概念:当前任务
如果后台的任务号有2个,[1],[2];如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码“[2]” 的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时,如果不加任何引号,则所变动的均是当前任务
六:nohup
如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
进程的终止
后台进程的终止:
方法一:
通过jobs命令查看job号(假设为num),然后执行kill %num
方法二:
通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid
前台进程的终止:
ctrl+c
kill的其他作用
kill除了可以终止进程,还能给进程发送其它信号,使用kill -l 可以察看kill支持的信号。
SIGTERM是不带参数时kill发送的信号,意思是要进程终止运行,但执行与否还得看进程是否支持。如果进程还没有终止,可以使用kill -SIGKILL pid,这是由内核来终止进程,进程不能监听这个信号。
进程的挂起(暂停的意思吧)
后台进程的挂起:
在solaris中通过stop命令执行,通过jobs命令查看job号(假设为num),然后执行stop %num;
在redhat中,不存在stop命令,可通过执行命令kill -stop PID,将进程挂起;
当要重新执行当前被挂起的任务时,通过bg %num 即可将挂起的job的状态由stopped改为running,仍在后台执行;当需要改为在前台执行时,执行命令fg %num即可;
前台进程的挂起:
ctrl+Z;
使用jobs 查看任务。

使用jobs -l来查看每个后台任务的具体进程号
使用fg %n 关闭。


使用nohup,相当于,把输出流给重定向到一个log文件里面了,在这里就是我们的nouhp.out文件,我们可以查看这个文件,来及时掌握log的日志,截图如下:

  • 大小: 1.8 MB
分享到:
评论

相关推荐

    Linux后台运行命令

    Linux后台运行命令最简的就是使用快捷键来完成,但是还是会有些其他的Linux后台运行命令例如cron和crontab这两个命令,这两个命令可以设置一些定时的任务,涉及进程调度,这里加以详细介绍。

    开发Linux操作系统后台服务进程详解

    守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某 种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。 Linux的大多数服务器就是用守护进程实现的。守护进程的编程...

    Linux中进程在后台可靠运行的方法总结

    本篇文章主要给大家介绍了Linux中进程在后台可靠运行的方法以及示例代码分析,一起学习参考下吧。

    Linux技巧:让进程后台运行

    Linux技巧:让进程后台运行,包括一些常用的操作技巧,nohup,setid.screen等。

    Ruby-轻松实现在Linux服务器上后台运行RubyRails进程

    ?轻松实现在Linux服务器上后台运行Ruby/Rails进程

    在后台运行Linux命令的方法

    另外一个选项,就是在后台运行命令。 一个后台进程就是说一个进程/命令在终端启动后,运行在后台,并且不会和用户发生任何交互。 在这篇文章中,我们将会讨论在 Linux 中的后台进程。我们将会为你演示如何在后台启动

    详解linux后台运行和关闭、查看后台任务

    查看当前有多少在后台运行的命令 jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。也就是...

    Linux C 后台服务程序单进程控制的实现

    介绍 ... 若加锁成功,说明后台服务进程没有在运行,这时可以正常启用进程 后台服务程序单进程控制 详细不多说,直接看代码 #include #include #include #include #include #include #define

    在Linux中查看及终止正在运行的后台程序方法

    linux 任务管理-后台运行与终止 fg、bg、jobs、&、ctrl + z命令 一、 & 加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &, 二、ctrl + z 可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可...

    Linux中如何让进程在后台运行

    在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中了: $ ./test.sh & [1] 17208 $ jobs -l [1]+ 17208 Running ./test.sh &  对于...

    jar畅游Linux后台

    目录jar通常方式jar后台运行方式方式一方式二查看后台运行任务查看某端口占用的线程的pidlinux 进程查看及杀死进程附录:各种信号及其用途 Linux系统运行jar包 jar通常方式 java -jar xxx.jar 特点:当前ssh窗口被...

    QtService 实现Qt后台服务程序

    本文使用QtService演示如何实现一个windows下的后台进程,可用于一些简单的windows服务程序中。 博客介绍:https://luoyayun361.blog.csdn.net/article/details/120655011?spm=1001.2014.3001.5502

    解决linux系统中运行node进程却无法杀死进程的问题

    主要介绍了linux系统中运行node进程无法杀死进程的问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    Python脚本后台运行的几种方式

    一个用python写的监控脚本test1.py,用while True方式一直运行...linux 下后台运行 通过fork实现 linux环境下,在c中守护进程是通过fork方式实现的,python也可以通过该方式实现,示例代码如下: 代码如下: #!/usr/bi

    Qt编写守护进程

    没有任何人敢保证自己写的程序没有任何BUG,尤其是在商业项目中,程序量越大,复杂度越高,出错的概率越大,尤其是现场环境...8:自动隐藏的托盘运行或者后台运行。 9:提供界面设置程序名称已经开启和暂停服务。

    深入了解Linux的守护进程

    深入了解Linux的守护进程 Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由运行在后台的守护进程(daemons)来执行的

    Linux编程之《守护进程》

    守护进程,也是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时...

    linux中巡检进程是否存在的sh脚本语法

    脚本自制,当中包含基础性的语法,可以用于测试linux系统的部分进程、驱动,以及收集后台的必要信息。可以提供给学习sh脚本编写的新手...后台运行该脚本,在/var目录下result打包文件中的result.txt就是你想要的结果。

Global site tag (gtag.js) - Google Analytics