<返回更多

linux常用功能——后台运行

2023-03-06  今日头条  无拘无束的王小臭
加入收藏

不中断的在后台运行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:显示所有程序,不以终端机来区分

其他使用技巧:

  1. 将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。
  2. 将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。

命令详解:

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参数可以断点续存并且加到最大速度。

忘记挂后台了怎么办?

  1. ctrl + z 把程序挂起,jobs 查看任务状态。是否已经被停止和命令编号[num]
  2. 使用bg %num命令把作业号为1的任务放入后台,并从停止状态变为运行状态,相当于加了&后接着运行。
  3. 运行disown -h %num,表示在终端关闭时不对作业号为1的程序发送终止信号,外部因素将不影响程序的运行。

nohup和disown都可以使程序不挂断,可以获得一样的效果,但原理不太一致。
nohup可以使程序忽略挂断信号(SIGHUP)或者使程序脱离终端的控制,从而终端不能再对其发送挂断信号(SIGHUP);
disown则是内生于shell,告诉shell在终止时不对对应程序发送挂断信号(SIGHUP)。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>