ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux下在后台运行命令

2020-06-04 13:52:57  阅读:310  来源: 互联网

标签:PID 命令 nohup Linux 后台 进程 终止


使用ssh会话在远程linux服务器执行命令时,如果由于网络问题终端断开连接,则正在前台运行命令也会随之终止,为了解决这个问题,就需要将命令放在后台运行,并且退出当前终端也不会终止进程。

# &命令

command &

在要执行的命令后加&表示将此进程放在后台运行,程序中的输出依然会在前台显示。

如果希望继续在当前终端工作的话,可以用以下命令将输出重定向到文件中:

command > out.file 2>&1 &

上述命令执行后,会显示出进程号。也可用ps -ef | grep查询进程号(ps -ef | grep python查询python进程),kill PID杀死进程号为PID的进程。

当ssh会话没有断开或用户未退出时,使用&执行的命令会在后台安静的运行,但当用户退出或由于意外断开连接时,命令依然会终止

# nohup命令

nohup在维基百科中的定义:

nohup 是一个 POSIX 命令,用于忽略 SIGHUP ("signal hang up" 译:挂断信号) 。 SIGHUP信号是终端注销时所发送至程序的一个信号。nohup命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到终端上。

也就是说,nohup可以防止终端注销时导致的进程终止。

通常将nohup&命令放在一起使用:nohup command &,此时命令将在后台运行,且断开ssh会话或退出当前用户都不会终止进程。

nohup命令默认将程序所有的输出保存到当前目录的nohup.out文件中,也可以指定输出文件:

nohup command > out.file 2>&1 &

其中> out.file将输出指定到out.file文件,2>&1将标准错误信息重定向到标准输出(0,1,2分别代表stdin标准输入,stdout标准输出,stderr标准错误),最后的&即为转到后台运行。

注意:程序转入后台运行之后,最好使用exit来退出当前用户,否则可能由于非正常退出导致进程意外终止。

# jobs命令

jobs用来查看当前终端有哪些后台进程

jobs -l可以显示后台任务的进程号

jobs命令的输出结果中,+表示是当前的作业,-表示是当前作业的下一个作业。

任务的状态分为3种:RunningStopped(程序暂停),Terminated(进程终止)。

不过jobs只对当前终端有效,在新的终端中将无法查询,此时就需要使用上文中的ps命令来查询后台进程。

# 前台进程挂起和终止

ctrl + z将正在前台运行的程序转至后台,并挂起(Stopped)

ctrl + c终止前台程序

# 后台进程挂起和终止

red hat中,通过kill -stop PID将后台进程挂起(Stopped),其中PID为ps查询的进程号。

通过jobs查看任务号numkill %num终止进程,或者通过ps查看进程号PIDkill PID终止进程。

# fg、bg命令

fg命令将后台程序转至前台运行,若有多个后台进程,则用fg %num将后台进程num转至前台。

bg将挂起的任务进程重新启动,若有多个后台进程,则用bg %num将后台任务num重新启动。

注意:上述num是通过jobs命令查询到的后台进程号,而非ps查询的进程号PID

标签:PID,命令,nohup,Linux,后台,进程,终止
来源: https://www.cnblogs.com/dev-sy/p/13043029.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有