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.