linux 如何让程序后台执行

$ (./test.sh &)

$ setsid
.
/test.sh
&

$ nohup ./test.sh &

具体的转自:http://digdeeply.org/archives/06281192.html

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






Example

1

2

3

4

5

$ ./test.sh &

[1] 17208

$ jobs -l

[1]+ 17208 Running                 ./test.sh &

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






Example

1

2

3

4

5

6

7

8

$ ./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)






Example

1

2

3

4

5

6

7

8

9

$ 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






Example

1

2

3

4

5

6

$ 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命令:






Example

1

2

3

4

5

6

7

8

9

10

11

$ ./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异曲同工。方法很简单,将命令用括号() 括起来即可:






Example

1

2

3

4

5

$ (./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的效果,这在有多个命令需要在后台连续执行的时候比较方便:






Example

1

2

3

4

5

6

7

8

$
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 如何让程序后台执行,布布扣,bubuko.com

时间: 2025-01-02 15:40:12

linux 如何让程序后台执行的相关文章

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上应用程序的执行机制

linux上应用程序的执行机制 执行文件是如何在shell中被"执行"的.本文中尽可能少用一些源码,免得太过于无 聊,主要讲清这个过程,感兴趣的同学可以去查看相应的源码了解更多的信息. 1.父进程的行为: 复制,等待 执行应用程序的方式有很多,从shell中执行是一种常见的情况.交互式shell是一个进 程(所有的进程都由pid号为1的init进程fork得到,关于这个话题涉及到Linux启动和初 始化,以及idle进程等,有空再说),当在用户在shell中敲入./test执行程序时,

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 创建并发后台执行任务并等待任务执行完成

nohup程序后台执行

Linux常用命令,用于不挂断的执行程序. nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令.该命令可以在你退出帐户/关闭终端之后继续运行相应的进程.nohup就是不挂起的意思( no hang up). nohup Command [ Arg ... ] [ & ] 如果不将 nohup 命令的输出重定向,输出将附加到当前目录的nohup.out 文件中.如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohu

Linux下C程序插入执行shell脚本

1.system(执行shell命令) 相关函数 fork,execve,waitpid,popen表头文件 #include<stdlib.h>定义函数 int system(const char * string);函数说明 system()会调用fork()产生子进程,由子进程来调用/bin/sh-cstring来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程.在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被

【Linux笔记】在后台执行scp,实现服务器间无密码文件拷贝。

远程备份大容量时常会有这样的情形:从远程备份的文件很大,需要很长时间,想在退出ssh后程序依然能继续在后台下载,可以通过建立服务器间安全信息关系和nohup的方式解决. 有两台服务器:A服务器IP 192.168.3.100.B服务器IP 121.41.111.46. 一.建立服务器之间的安全信任关系证书 1.在A服务器生成密钥配对 在A服务器生成配对密钥,遇到提示时保持默认敲回车即可, [[email protected] ~]#ssh-keygen -t rsa 该公钥被保存的用户宿主目录的

如何在linux的Oracle上后台执行SQL

场景:如果你要收集库的统计信息,大概要7-8个小时,你又要把自己的电脑关掉,想在服务器上执行,用下列方法. nohup sqlplus user/[email protected] @xxx.sql >run.log & 执行上面的语句后,关闭远程窗口,通过v$session和v$session_wait查看是在跑.也可以通过user_tables的最后分析时间.

如何让程序在后台执行

示例:查看系统负载的脚本 #!/bin/sh while true do uptime >/tmp/uptime.log sleep 1 done [[email protected] scripts]# tail -f /tmp/uptime.log 21:37:26 up 5:49, 2 users, load average: 0.00, 0.00, 0.00 tail: /tmp/uptime.log: file truncated 21:37:27 up 5:49, 2 users,

所经历的大文件数据导出(后台执行,自动生成)

所经历的大文件数据导出(后台执行,自动生成) http://www.cnblogs.com/fanfan259/p/4710019.html 阅读目录 一.前言 二.生成excel文件 三.让程序在后台执行 四.显示文件生成进度 五.下载文件 六.上线后出现的问题 七.相应的后续优化 八.后记 一.前言 记录一下以前做的后台excel格式导出统计信息的功能,也是最近同事问到了相关东西,一时之间竟忘了具体的细节,因此记录一下: 大家知道,excel导出数据的功能,后台几乎是必须功能,一般都是点击后