不中断的在后台运行test.sh:
nohup ./test.sh &
其中,“&” : 只在后台运行
nohup : 不挂断的运行,注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行。
注意了nohup没有后台运行的意思、&才是后台!!!
如图,提交到后台以后,会告诉你当前窗口的命令编号"[1]",以及该进程在系统中的进程编号64746。
你可以通过以下两个方式,停掉你后台的程序:
法子1:在该窗口找到命令编号,然后执行kill %num,如kill %1
法子2:或者利用系统进程编号,然后执行kill pid,如64746
当进程提交太久,找不到两个编号的时候,我们可以通过以下命令进行查看:
1. 使用ps -ef |grep test.sh可查看到正在运行的test.sh脚本进程。
2. jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。(展示该窗口下提交的任务),以及命令编号。
ps命令的使用,见linux常用命令——ps。
也可以通过以下命令查看详细信息:
ps -aux | grep "test.sh"
#a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分
其他使用技巧:
命令详解:
nohup command > myout.file 2>&1 &
0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error)
2>&1是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输入到myout.file文件中。默认情况下,后台运行的报告信息会被导入到目录下的nohup.out文件中。
0 22 * * * Python/ target=_blank class=infotextkey>Python test.py > test.log 2>&1
这是放在系统中的定时任务,晚上22点时候执行这个任务,启动这个python的脚本,并把日志写在test.log文件中。
使用实例:
下载:使用aspera下载EBI数据库的测序数据。(如果大家感兴趣,接下来可以写一下关于公共数据库下载的内容。)
nohup ascp -QT -l 100M -i ~/asperaweb_id_dsa.openssh era-fasp@fasp.sra.ebi.ac.uk:/vol1/fastq/SRR310/004/SRR3101254/SRR3101254.fastq.gz . &
nohup+命令+&:将命令放置到后台运行,并且断开连接依旧运行,QT参数可以断点续存并且加到最大速度。
nohup和disown都可以使程序不挂断,可以获得一样的效果,但原理不太一致。
nohup可以使程序忽略挂断信号(SIGHUP)或者使程序脱离终端的控制,从而终端不能再对其发送挂断信号(SIGHUP);
disown则是内生于shell,告诉shell在终止时不对对应程序发送挂断信号(SIGHUP)。