关键词:nohup 后台执行
Keywords: nohup background excute stop

常用的脑影像数据分析和遗传数据分析工具往往采用命令行的方式,用户通过Terminal执行命令行以完成相关数据分析,这种方式可以满足通常情况的需求。在一些特别的情况下,你可能会需要将命令行提交到后台执行,以避免一些意外的情况:

  1. 通常情况下,Terminal和执行的命令是绑定的,即如果在执行程序过程中意外关闭的执行该程序的Terminal,改程序的执行会一起终止。
  2. 通过Terminal访问服务器,在服务器上执行程序时,如果意外出现网络中断,相应的程序也会因此而终止。

Linux中的nohup命令提供了一个很好的解决方案,即将程序提交到后台执行,即使出现上述意外,程序依旧会照常执行。比如这里要执行一个Python程序,通常的方式是采用下面的命令行
python s1.extract_ts.py
如果采用这种方式提交,Terminal关闭后,程序执行会被终止。

通过下面的方式可以采用nohup提交程序到后台执行:
nohup python s1.extract_ts.py &
这样执行该命令行后,即便关闭Terminal或远程访问服务器的网络中断,程序执行会照常继续。
也可以通过下面的命令将该程序执行过程中的output保存到一个文本文件中
nohup python s1.extract_ts.py > nohup.log &
这样,程序执行过程中的output会保存到这个log文件中;而且这个保存是实时的,因此可以通过查看该log文件的内容确定程序运行的到那个阶段,或是否有报错。

在一些情况下,你可能会发现通过nohup提交的程序可能有问题,需要停掉该程序。可以通过下面的命令,首先查看相应程序的PID,然后将其杀掉。
ps -ef | grep "s1.extract_ts.py"
kill <PID>