0
点赞
收藏
分享

微信扫一扫

使程序在后台运行

nohup&的区别

& : 指在后台运行

nohup : 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;&才是后台运行

&是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出

那么,我们可以巧妙的吧他们结合起来用就是

方法一、nohup COMMAND &

这样就能使命令永久的在后台执行

 

 

 

jobs

查看当前有多少在后台运行的命令

jobs -l选项可显示所有任务的PID

 

 

ctrl + z

可以将一个正在前台执行的命令放到后台,并且处于暂停状态。

 

 

fg

将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。

 

bg

将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。

 

概念:当前任务

如果后台的任务号有2个,[1],[2];如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码“[2]” 的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时,如果不加任何引号,则所变动的均是当前任务

 

kill

  • 法子1:通过jobs命令查看job号(假设为num),然后执行kill %num
  • 法子2:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid

 

 

方法二、对于正在运行任务 先按contrl+Z使其suspense

 

contrl+z // 挂起

bg         // 在后台运行

 

jobs  查看任务

 

disown %1

 

 

disown会将某个job移除,所以关闭shell后依然在后台运行

,当使用过 disown 之后,会将把目标作业从作业列表中移除,我们将不能再使用jobs来查看它,但是依然能够用ps -ef查找到它。

 

 the disown builtin command is used to remove jobs from the job table, or to mark jobs so that a SIGHUP signal is not sent to them if the parent shell receives it (e.g. if the user logs out).

 

 

使用 -h  disown -h %1  disown -h会标记这个jobs,当退出时仍然运行 但不移除这个job(在bash下好像可以,在zsh下貌似不能运行 mac环境下测试)

 

This option mark each jobID so that SIGHUP is not sent to the job if the shell receives a SIGHUP. 

 

举报

相关推荐

0 条评论