linux – 为什么shell命令“{command1; command2:}&“打开
发布时间:2020-12-14 01:20:35 所属栏目:Linux 来源:网络整理
导读:众所周知,在花括号之间放置一个命令列表会导致列表在当前的 shell上下文中执行.没有创建子shell.但是当使用“”时在“{}”之后,为什么要创建两个子壳? pid 1002和1003. { ./a.out} sleep 19 使用“./a.out”时,只创建一个子shell. pid 17358. ./a.out sleep
众所周知,在花括号之间放置一个命令列表会导致列表在当前的
shell上下文中执行.没有创建子shell.但是当使用“&”时在“{}”之后,为什么要创建两个子壳? pid 1002和1003.
{ ./a.out } & sleep 19 使用“./a.out&”时,只创建一个子shell. pid 17358. ./a.out & sleep 19 为什么? 解决方法
列表的后台执行使用子shell,因为某些东西需要等待该列表的每个成员并运行下一个成员.列表背景化后,父shell需要可用于新命令;它也无法管理后台列表. bash一次不能做多件事.因此,为了使后台列表工作,它运行一个子shell.
请注意,您可以拒绝后台列表,它将继续运行,表明子shell正在执行其工作: ${ > sleep 1; sleep 2; sleep 3; sleep 4; sleep 5 > } & $disown $ps -f | grep sleep dave 31845 31842 0 03:50 pts/1 00:00:00 sleep 3 dave 31849 31771 0 03:50 pts/1 00:00:00 grep sleep 您甚至可以注销,子shell将继续运行列表中的进程. 当您对单个命令进行后台处理时,不需要子shell,因为在运行该命令后,shell不再需要执行任何操作. 在您的示例中,第二个附加bash子进程PID 1002似乎是您正在执行的脚本.这与列表背景机制无关(概念上至少);单独文件中的任何脚本都有自己的bash进程. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |