美文网首页生物信息数据科学
11.《Bioinformatics Data Skills》之

11.《Bioinformatics Data Skills》之

作者: DataScience | 来源:发表于2021-05-30 16:32 被阅读0次

生物信息学某些分析会占据大量的时间,这里了解如何使进程在后台运行,终止进程与查看进程状态的基本操作。

后台运行进程

  • 使程序在后台运行只需要在命令后面添加&符号即可,例如:
R &
# [1] 28374

下面生成的数字是程序唯一的ID(PID)。
可以使用jobs命令查看后台进程:

jobs
# [1]+  Stopped                 R

展示出所有后台运行的程序列表(最近的在最前面,这里只有一个程序)。

  • 如果想要将后台程序重新调到前台的话,可以根据jobs返回的序号使用fg %序号(fg %1等同于fg)命令(注:这个序号与PID没有关系
fg
#R
  • 如果一个程序已经运行,可以先将它暂停(ctrl+z)再使用bg命令将它放到后台去(如果有多个程序需要放到后台,类似前面的fg使用jobs返回的编号作为bg %序号参数)
# 按下ctrl+z
[1]+  Stopped                 R
jobs
# [1]+  Stopped                 R
bg
# [1]+ R &

终止进程

如果想要终止后台运行的程序,最简单的操作是使用上面提到的操作将后台程序调到前台,然后使用ctrl + c终止。
注:
1. 更进阶的操作是使用top或者ps命令查看进行的PID,使用kill命令杀死进程,但是这里不详细介绍。
2. 关闭终端窗口会也会导致后台程序终止,避免这种情况需要采用nohup命令或者Tmux工具,后面会介绍。

查看进程状态

程序后台运行的问题是程序什么时候运行完毕了?成功地返回结果了还是出错了?事实上,shell程序运行结束后都会有一个退出状态(exit stauts),0代表成功运行,其它数字代表不同类型的错误。例如我们使用truefalse命令为例:

true
echo $?
# 0
false
echo $?
# 1

状态码是非常有用的,我们可以将多个程序连接起来。例如我们想要使用program1生成中间结果,然后使用program2读取中间结果作为输入,为了保证program1的结果生成完毕后再执行program2,我们可以采用短路运算符&&(意思是前面的程序返回成功运行的0才运行后面的程序)

program1 input-file > intermediate-file && \
program 2 intermediate-file > result.txt

&&相对的是||运算符,意思是前面一个程序非成功运行(返回非0状态)时才运行后面一个程序。观察下面的结果:

true && echo "first success"
# success
false && echo "first success"
# 
true || echo "first not success"
# 
false || echo "first not success"
# first not success

如果不论前面是成功还是失败都执行后一个程序的话可以采用连接程序

false; true; false; echo "none of the previous mattered"
# none of the previous mattered

相关文章

网友评论

    本文标题:11.《Bioinformatics Data Skills》之

    本文链接:https://www.haomeiwen.com/subject/mfxmsltx.html