- 11.《Bioinformatics Data Skills》之
- 28.《Bioinformatics-Data-Skills》之
- 18.《Bioinformatics-Data-Skills》之
- 19.《Bioinformatics-Data-Skills》之
- 【shell笔记>生信|专项】生信数据处理技能手札(3):
- Bioinformatics Data Skills
- 17.《Bioinformatics-Data-Skills》之
- 25.《Bioinformatics-Data-Skills》之
- 25.《Bioinformatics-Data-Skills》之
- 23.《Bioinformatics-Data-Skills》之
生物信息学某些分析会占据大量的时间,这里了解如何使进程在后台运行,终止进程与查看进程状态的基本操作。
后台运行进程
- 使程序在后台运行只需要在命令后面添加
&
符号即可,例如:
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代表成功运行,其它数字代表不同类型的错误。例如我们使用true
与false
命令为例:
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
网友评论