不吹不黑660的魅蓝note6曜石黑3能用两年吗

如何让进程后台运行——多种方案整理 - 推酷
如何让进程后台运行——多种方案整理
相信对服务端有所了解的同学对于
如何让进程后台运行
这个问题都有自己的处理方式,本人零零散散也知道一些方法,但偶尔也会陷入搞混的情况(知其然但不知其所以然,命令就这么用呗,也就不管为什么了)。加上近期有不止一个技术还不错朋友在跟我交流中对于如何处理这个问题产生了一些困惑,我想它可能是一个比较普遍存在的问题,因此打算较为系统地整理一下各种八仙过海的神通,同时也稍微扯一扯一些进程信号的问题。
在shell中通过命令行的方式启动一个server,如何能够让它长久地运行呢?我一旦关了这个shell它就无法服务了,这可不是我们想要的结果,这一节将会介绍各种相关的方法。做各种实验之前,我在
上申请了一台临时的vps,做完就把它释放了,操作系统是CentOS 7。
说句题外话,conoha这个云服务商个人感觉还不错,性价比很高,虽然可能东京的线路偶尔会丢包比较严重,但新加坡的线路很棒,出入100M带宽不限流量,我自己平时用的就是它。好,扯回来,继续我们的整理。
这篇文章的测试server我们就采用nodejs官网的demo吧:
// server.jsconst http = require('http');const hostname = '0.0.0.0';const port = 8000;http.createServer((req, res) =& {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World\n');}).listen(port, hostname, () =& {
console.log(`Server running at http://${hostname}:${port}/`);});
nohup顾名思义,就是忽略hup信号。hup信号是什么呢,就是当一个shell窗口关闭的时候,会给隶属于它的所有进程发一个hup信号,然后该进程就挂了,除非进程捕获了hup信号,然后做了其它的事情,而不是
使用方式就是在平常的命令前加一个nohup命令:
nohup node server.js
默认情况下,这个命令会在当前目录下产生一个
文件作为程序的输出。当然你也可以使用管道的方式将输出重定向到其它地方:
nohup node server.js && your_log
这个符号其实并不能解决本文所提到的问题,它只是一个比较好的辅助方式让控制台重新回到你的掌控中,从而可以继续输入其它命令。
node server.js &
这样进程就不会把shell阻塞住了。
用括号把命令包起来运行,也是一个可以让进程后台运行的方式,它的原理是把进程所隶属的session从当前的shell中解放出来,丢给一个subshell。这样一来,shell关闭发送的hup信号就不会被发到它了。就像这样:
(node server.js)
建立并返回一个新的session给控制台,进程启动在旧的session,并与终端脱离,所以当前会话关闭与否就对原来的会话没有什么影响了。因此,这种方式及时没有后缀
,控制台依然不会阻塞。
setsid node server.js
平时在我们操作的过程中,那肯定不会只用上述的一个命令,会把多种组合在一起,这里我们就把它们组合起来看看吧。
关闭shell窗口进程还在
exit退出进程还在
node server.js
nohup node server.js
(node server.js)
node server.js &
nohup node server.js &
(node server.js &)
setsid node server.js
一些常用信号
:从终端上发出的结束信号.
:来自键盘的中断信号 ( ctrl + c ) .
:该信号结束接收信号的进程 .
:kill 命令发出 的信号.
:标识子进程停止或结束的信号.
:来自键盘 ( ctrl + z ) 或调试程序的停止执行信号.
:来自键盘 ( ctrl + \ ) 表示终止前台进程并生成 core 文件.
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 40, 距离下一级还需 160 积分
论坛徽章:0
ctrl+z 会暂停当前进程并将之放入后台
请问如何通过按键,不暂停当前进程并将之放入后台
当然可以通过ctrl+z 先将进程暂停并放入后台,然后再bg %jobspec 来将进程在后台运行
但如何不暂停,直接将进程从前台转入后台?
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
论坛徽章:379
直接在命令行结尾写个&把进程放到后台不行吗
白手起家, 积分 40, 距离下一级还需 160 积分
论坛徽章:0
本帖最后由 jueljust 于
18:46 编辑
是说一个已经在前台运行,占据控制台的进程
不是一个还未发出的指令啦
论坛徽章:4
装个tmux再开出一个终端来。
大富大贵, 积分 17598, 距离下一级还需 2402 积分
论坛徽章:19
& &怎么把这样的(指&)的进程提到前台,查看是否结束了
大富大贵, 积分 13748, 距离下一级还需 6252 积分
论坛徽章:0
这个还真不知道
腰缠万贯, 积分 9841, 距离下一级还需 159 积分
论坛徽章:0
是contrl+b吗
论坛徽章:104
你知道bg,怎么不知道fg?
稍有积蓄, 积分 468, 距离下一级还需 32 积分
论坛徽章:0
本帖最后由 expresss 于
20:53 编辑
好像是无解,一般运行大的cp耗时工作会加个&直接转入后台,如果忘了,我会用楼主的办法先暂停然后再bg,
如果非得想个办法,估计只有再开一个终端,然后给那个进程再指定一个后台的信号,但信号中好像没有这种信号,只有让进程暂停的,然后再bg命令,其实跟Ctrl+Z再bg是一个意思。翻kill的man手册试试。
稍有积蓄, 积分 468, 距离下一级还需 32 积分
论坛徽章:0
方兆国 发表于
回复 2# chenyx
已经有人说了,跟bg对应的是fg,如果在后台运行,运行完了,你再执行其它命令的时候会有提示你的某个用户进程在后台执行完毕。
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处linux让程序后台运行或从后台到前台运行的方法
例:又一个70G的东西我需要把她解压缩或者是压缩,我不可能老是开着终端,如果老是开着终端,如果传到一半断一下电或者断一下网,你就玩完了,所以我们可以把她放到终端运行:
@#:nohup 你的shell命令 & 例子:nohup tar -zxvf /var/www/html.tar.gz & 这个命令会产生一个nohup的日志
例子2:就是你要查看在后台的工作有没有做完或者是调到前台运行:
 使用 jobs 查看任务。
 使用 fg %n 关闭。
 另外有两个常用的ftp工具ncftpget和ncftpput,可以实现后台的ftp上传和下载,这样我就可以利用这些命令在后台上传和下载文件了。
5.fg 命令&
它的作用是把指定的后台作业移植到前台,其格式是:&
fg [job...]&
其中参数job是一个或多个进程的PID,或者是命令名称或是作业号(前面要带一个%号)&
[2] + running tar tv3 * &&
[1] - running find/ -name README -print & logfile&&
$ fg %find&
find/-name README -print & logfile&
注意,显示的命令行末尾没有&符号.下面的命令能产生同样的效果:&
6. bg 命令&
它是把前台进程换到后台执行,其使用格式是:&
bg [job...]&
其中,job还是一个或多个进程的PID,命令名称或作业号,在参数前要带%号.例如,在cc(C编译命令)命令执行过程中,按&
Z键,使作业挂起.然后键入以下命令:&
该挂起的作业在后台重新开始运行.........&
再补充几个UNIX进程管理命令.&
ps命令-主要是检查中当前存在的进程状态.要了解当前系统上活动的进程信息,最基本的操作是运行ps命令.&
当ps命令没有选项时,只显示与控制终端相关进程的基本信息.例如,在主控制tty01上键入ps:&
PID TTY TIME CMD&
595 tty01 00:00:00 sh&
607 tty01 00:00:00 ps&
其中PID--是进程的ID号&
TTY--终端标识符&
TIME--进程占用CPU的时间&
CMD--与进程对应的命令&
sleep命令是使进程暂停执行一段时间,其参数单位是秒.例如:&
$ sleep 60&
表示将等待60秒后,才重新回到$提示符状态.&
wait命令的功能是等待后台进程结束.其命令格式是:&
$ wait 后面跟参数&
kill命令是终止一个进程的运行.如果你是个超级用户下:&
$ kill 123&
就是停止PID为123的进程运行.如果想强行杀死某个进程(由PID指定),可以用以下形式:&
# kill -9 pid&
at命令要ROOT权限。&
ps -ef列出所有正在进行的进程!&
ps -ef|grep xxx查找 进程中含有xxx的进程
作者 lonleyemperorLinux中让进程在后台运行的方法
作者:佚名
字体:[ ] 来源:互联网 时间:09-14 08:26:51
作者:NinGoo | 【转载须以超链接形式标明文章原始出处和作者信息】
在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中了:
$ ./test.sh &
[1]+ 17208 Running ./tes
作者:NinGoo | 【转载须以超链接形式标明文章原始出处和作者信息】 在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
0 11:47 pts/12 00:00:00 /bin/sh ./test.sh 515
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 :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
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
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
大家感兴趣的内容
12345678910
最近更新的内容小技巧:让linux程序在后台运行_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
小技巧:让linux程序在后台运行
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用5下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 魅蓝note6黑色 的文章

 

随机推荐