Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash作业控制-是否可以在不首先终止的情况下终止列表中的第二个命令?_Bash_Background Process_Job Control - Fatal编程技术网

Bash作业控制-是否可以在不首先终止的情况下终止列表中的第二个命令?

Bash作业控制-是否可以在不首先终止的情况下终止列表中的第二个命令?,bash,background-process,job-control,Bash,Background Process,Job Control,如果我在bash提示符下发出这个命令:$cmd_1;cmd_2 cmd_1在前景中。我可以在不停止cmd_1的情况下阻止cmd_2运行吗?我必须等到cmd_1完成,此时cmd_2将开始,然后就太晚了 我不认为这是可能的,但也许有工作控制 a-Z$bg是否将这两个命令都推送到bg中?更确切地说,cmd_1是否转到背景,cmd_2(在哪里?“挂起的背景?”如@cmd?)是否仍在等待cmd_1退出 这些命令不是有条件地调用的,即“cmd_1&&cmd_2”,也不是基于调用的命令。cmd_1正在fg中运

如果我在bash提示符下发出这个命令:$cmd_1;cmd_2

cmd_1在前景中。我可以在不停止cmd_1的情况下阻止cmd_2运行吗?我必须等到cmd_1完成,此时cmd_2将开始,然后就太晚了

我不认为这是可能的,但也许有工作控制

a-Z$bg是否将这两个命令都推送到bg中?更确切地说,cmd_1是否转到背景,cmd_2(在哪里?“挂起的背景?”如@cmd?)是否仍在等待cmd_1退出

这些命令不是有条件地调用的,即“cmd_1&&cmd_2”,也不是基于调用的命令。cmd_1正在fg中运行,cmd_2尚未执行

这里的facepalm是,cmd_1需要很长时间才能完成,cmd_2是破坏性的,我真的不想打断并再次执行cmd_1。我只希望cmd_1完成,cmd_2根本不运行


我可以通过将cmd_2移动到cmd_2.sav直到cmd_1完成并导致“-bash:cmd_2:command not found”而导致cmd_2失败,但我希望有一个更优雅的解决方案。cmd_2可能在cmd_1完成之前被其他人使用。(是的,我可以用cmd_2包装器包装cmd_2.real,并进行用户测试或类似的测试,但这种方法存在疯狂)。

可能有更好的方法,但这会起作用:

  • 按Control-Z暂停命令1
  • cmd_2将开始运行。你可以按Control-C来杀死它,或者你可以在第一步之前做你的“重命名技巧”,这样它就没有机会启动了
  • 一旦cmd_2停止/阻止启动,键入
    fg
    继续cmd_1操作

  • 如果您想提前尝试此方法,以确保您得到的行为符合预期,请结合使用
    sleep
    echo
    命令进行练习。i、 例如,运行
    sleep 10;从终端回显“hello”
    。按Control-Z暂停sleep命令,并输出“hello”。键入
    fg
    恢复睡眠。

    在这种情况下,只需添加

    echo "Press a key to begin... ${0}"
    read
    

    cmd_2
    的开头。这样,你就不会严重妨碍想要使用
    cmd_2
    的人,你也给自己一个机会在它破坏你想要保存的东西之前杀死它。

    你的假设是错误的。Cmd2将仅在cmd1完成时运行。请尝试
    cmd1&&cmd2
    使其仅在cmd1成功时运行。感谢您对cmd2启动时间的说明。问题假设命令已被调用,而不是另一种调用方法。问题是如何修改“命令堆栈”中的挂起命令(假定在解释器中有这样的事情)。我重新阅读了注释,发现问题的措辞有点混乱。编辑。