linux学习Linux入门

Linux学习--No.4父子shell与后台模式

2020-02-15  本文已影响0人  小贝学生信

理解Linux父子shell间的关系以及后台运行模式可以让我们更高效地完成一些任务。

要点1:父子shell

bash
ps -f
#父子进程的关系可通过PID与PPID的关系看出。

值得注意的是进程的概念就是正在运行的程序。bash shell本身就是一个程序,它运行时就成为了一个进程。

bash
bash   #可以在子shell中再创造一个子shell,只是逻辑上可以,没有必要。
ps --forest   #可以形象的显示进程的层级关系
exit    #退出子shell
ps --forest

要点2:命令列表与进程列表

pwd;ls;cd;pwd;ls
#观察返回内容
(pwd;ls;cd;pwd;ls)
(pwd;ls;cd;pwd;ls;echo $BASH_SUBSHELL)
(pwd;ls;cd;pwd;ls;(echo $BASH_SUBSHELL))
#在shell脚本中,经常使用子shell进行多进程处理,但另一方面也会拖慢处理速度。

要点3:后台模式执行命令

sleep 30  #sleep命令用于引入一段时间的暂停。
sleep 30&   #回车键返回的是信息分别是后台作业号[]、后台作业的进程ID
ps -f
jobs  -l #专门显示当前运行在后台模式中的所有用户的进程;
#依次为作业号、PID、当前状态、对应的命令。

值得注意的是 &是指在后台运行,当用户退出(关闭)终端时,命令也会自动退出。nohup 是不挂断的运行,使命令可以永久的执行,直至完成,和用户终端没有关系,即使退出也不会影响。注意的是nohup本身没有后台运行的功能。因此后台模式& 搭配nohup可以高效完成任务

nohup prefetch  SRR1039511 -O ~ &    #后台不挂断的下载SRR1039511文件。
ps -ef|grep li
ps -ef|grep li|grep prefetch
cat nohup.out  #默认nohup.out为保存命令日志的文本信息
nohup prefetch  SRR1039510 -O ~ 1>SRR1039510.download.log 2>&1 &  

要点4:后台模式生成子shell工作

(1)方法1:搭配&

(pwd;ls;cd;pwd;ls;echo $BASH_SUBSHELL)& 

(2)方法2:协程 coproc

coproc sleep 10   #同样返回作业号与进程ID,然后让出CLI
jobs  

注意此时jobs返回的第三列显示形式为"coproc 名字 命令 &"。coproc,命令&的显示都是固定的,名字一般默认为COPROC,也可以自己设置(用花括号)

coproc mytest { sleep 10; } 
#将任务名为mytest,同时花括号格式要注意空格不能省,且要加一个分号
jods

小彩蛋

记录一个用nohup搭配& 下载生信大文件的任务文件,参考自文章

echo SRR10395{10..14}
echo SRR10395{10..14} | sed 's/ /\n/g' >SRR_Acc_List.txt 
#把空格符转换为换行符,并存储为SRR_Acc_List.txt文件
cat SRR_Acc_List.txt |while read id;do echo "prefetch  $id -O ~ 1>$id.download.log 2>&1";done 
# 先用echo打印,检查一下命令有没有问题

1、直接执行任务

cat SRR_Acc_List.txt |while read id;do prefetch  $id -O ~ 1>$id.download.log 2>&1;done

2、后台不挂断执行

cat >prefetch.sh  #输入下一行代码,然后 ctrl+c
cat SRR_Acc_List.txt |while read id;do prefetch $id -O ~ 1>$id.download.log 2>&1 &;done
nohup bash prefetch.sh &   #后台不挂断执行脚本文件

小技巧

1、忘记把任务放入后台直接执行了?

2、终止后台进程

fg 1    #将任务号为1的任务从后台执行转换到前台执行
上一篇 下一篇

猜你喜欢

热点阅读