`

在LINUX中关于后台执行运行命令

阅读更多
在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中了:

$ ./test.sh &
[1] 17208

$ jobs -l
[1]+ 17208 Running ./test.sh &

对于已经在前台执行的命令,也可以重新放到后台执行,首先按ctrl+z暂停已经运行的进程,然后使用bg命令将停止的作业放到后台运行:

$ ./test.sh
[1]+ Stopped ./test.sh

$ bg %1
[1]+ ./test.sh &

$ jobs -l
[1]+ 22794 Running ./test.sh &

但是如上方到后台执行的进程,其父进程还是当前终端shell的进程,而一旦父进程退出,则会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。如果我们要在退出shell的时候继续运行进程,则需要使用nohup忽略hangup信号,或者setsid将将父进程设为init进程(进程号为1)

$ echo $$
21734

$ nohup ./test.sh &
[1] 29016

$ ps -ef | grep test
515 29710 21734 0 11:47 pts/12 00:00:00 /bin/sh ./test.sh
515 29713 21734 0 11:47 pts/12 00:00:00 grep test

$ setsid ./test.sh &
[1] 409

$ ps -ef | grep test
515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh
515 413 21734 0 11:49 pts/12 00:00:00 grep test

上面的试验演示了使用nohup/setsid加上&使进程在后台运行,同时不受当前shell退出的影响。那么对于已经在后台运行的进程,该怎么办呢?可以使用disown命令:

$ ./test.sh &
[1] 2539

$ jobs -l
[1]+ 2539 Running ./test.sh &

$ disown -h %1

$ ps -ef | grep test
515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh
515 2542 21734 0 11:52 pts/12 00:00:00 grep test

另外还有一种方法,即使将进程在一个subshell中执行,其实这和setsid异曲同工。方法很简单,将命令用括号() 括起来即可:

$ (./test.sh &)

$ ps -ef | grep test
515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh
515 12483 21734 0 11:59 pts/12 00:00:00 grep test

注:本文试验环境为Red Hat Enterprise Linux AS release 4 (Nahant Update 5),shell为/bin/bash,不同的OS和shell可能命令有些不一样。例如AIX的ksh,没有disown,但是可以使用nohup -p PID来获得disown同样的效果。

还有一种更加强大的方式是使用screen,首先创建一个断开模式的虚拟终端,然后用-r选项重新连接这个虚拟终端,在其中执行的任何命令,都能达到nohup的效果,这在有多个命令需要在后台连续执行的时候比较方便:

$ screen -dmS screen_test

$ screen -list
There is a screen on:
27963.screen_test (Detached)
1 Socket in /tmp/uscreens/S-jiangfeng.

$ screen -r screen_test
分享到:
评论

相关推荐

    Linux后台运行命令

    ### Linux后台运行命令详解 #### 一、引言 在Linux操作系统中,用户可以通过各种方式启动后台任务。本文将重点介绍几种常用的Linux后台运行命令,包括快捷键方式以及`cron`和`crontab`命令的详细使用方法。这两种...

    linux命令在后台运行

    在Linux中,可以在命令末尾添加`&`符号来将命令置于后台执行。例如,如果我们想要运行一个名为`mysqld_safe`的命令,可以在其后添加`&`: ```bash /usr/local/mysql/bin/mysqld_safe –user=mysql & ``` 这种方法...

    在后台运行Linux命令的方法

    在Linux系统中,后台运行命令是一项非常实用的功能,它允许用户在执行长时间运行的程序时,继续在同一个shell会话中进行其他操作。这主要通过将命令与`&`符号结合来实现。例如,要将命令`command`放到后台运行,只需...

    linux 进程前后台切换命令

    这种方式会在命令行后面加上 `&`,表示这个命令在后台执行。执行完毕后,命令行不会返回提示符,而是显示该进程的进程ID (PID)。 ##### 2.2 使用 `CTRL + Z` 按下 `CTRL + Z` 可以将当前正在运行的前台进程暂停并发...

    linux后台运行m(matlab)文件

    本文介绍了如何在 Linux 系统中后台运行 MATLAB 文件,包括使用 nohup 命令和 Terminal 运行 MATLAB 文件两种方法。同时,强调了环境变量设置的重要性。后台运行 MATLAB 文件可以提高系统资源利用率和工作效率。

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

    加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &, 二、ctrl + z 可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行 三、jobs 查看当前有多少在后台运行的命令 jobs -l选项可显示所有...

    LinuxJobs等前后台运行命令解.docx

    例如,使用 cron 命令可以将任务安排到指定的时间执行,而使用 LinuxJobs 等前后台运行命令解可以将任务放到后台执行,以释放当前 Shell 会话。 LinuxJobs 等前后台运行命令解是一种非常有用的 Linux 命令,能够...

    后台执行shell命令

    在Linux系统中,后台执行shell命令是日常系统管理和自动化任务执行的重要组成部分。这些命令允许我们无需保持终端会话打开即可运行程序,极大地提高了工作效率。本文将深入探讨标题中提到的几种后台执行命令,包括`...

    Linux后台运行py服务程序1

    首先,`&`符号在Linux命令行中用于将任务置于后台执行。例如,当你输入`python /data/python/server.py > python.log &`时,这个Python脚本将会在后台启动,同时将标准输出(STDOUT)重定向到`python.log`文件中。这...

    shell 后台执行命令

    在Linux和Unix操作系统中,`shell`后台执行命令是一个重要的功能,它允许用户在不阻塞终端的情况下运行程序。这通常适用于那些长时间运行或者需要在特定时间执行的任务,以便用户可以继续其他工作。 首先,`cron`是...

    Linux nohup实现后台运行程序及查看(nohup与&)

    加在一个命令的最前面,表示不挂断的运行命令 (2) & 加载一个命令的最后面,表示这个命令放在后台执行 2. 查看后台运行的命令 有两个命令可以来查看,ps 和 jobs。区别在于 jobs 只能查看当前终端后台

    bat后台执行实现bat后台执行实现

    根据给定文件的信息,本文将围绕“bat后台执行”的主题展开详细讨论,旨在解析如何在Windows环境下通过批处理脚本(.bat文件)实现程序或命令的后台运行,并结合部分提供的内容进行具体分析。 ### 一、理解bat后台...

    Linux技巧:让进程后台运行

    本篇文章将讨论如何让进程在后台可靠运行的几种方法,解决在 Linux 服务器上运行耗时较长的任务时遇到的问题。这些方法包括使用 nohup、setsid 以及 & 井号符号来让进程忽略 HUP 信号,从而避免中途失败。 1. nohup...

    在Linux终端中使用后台运行模式启动程序的方法.docx

    本文将详细介绍如何在Linux终端中使用后台运行模式启动程序的方法,包括基本的启动方式、使用特定符号来标记后台进程、以及使用`nohup`命令来确保程序在终端关闭后仍能持续运行。 #### 二、基本概念 在Linux中,...

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

    在Ruby开发中,有时我们需要在Linux服务器上启动Ruby或Rails应用并使其在后台持续运行,以便为用户提供服务。本文将详细介绍如何实现这一目标,并提供一个名为"Procodile"的工具作为示例,它是一个用于管理Ruby后台...

    Linux下运行后台任务的方法.docx

    在 Linux 系统中,运行后台任务是非常重要的,因为在服务器上运行的程序可能会因为网络断线、关闭屏幕、执行 CTRL+C 等原因而中断,导致程序退出。为了避免这种情况,需要了解两种中断信号:sigint(signal ...

    Ubuntu下后台持续运行Python程序

    通常,当我们在终端中执行一个命令,该命令会在当前的shell会话中运行,如果关闭终端,程序也会随之结束。为了使Python程序能在后台独立运行,我们有几种方法: 1. **使用nohup命令**:`nohup python your_script....

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

    在上述命令中,`2>&1`表示将标准错误重定向到与标准输出相同的地方。 2. **setsid** setsid命令用于创建一个新的会话,并让进程成为该会话的会话领导。作为会话领导,进程不再属于初始登录会话,因此不受HUP信号...

Global site tag (gtag.js) - Google Analytics