Linux 有没有一种方法可以将shell脚本作为一个完整的任务运行(使用单个PID)?

Linux 有没有一种方法可以将shell脚本作为一个完整的任务运行(使用单个PID)?,linux,bash,shell,Linux,Bash,Shell,我有一个名为run.sh的shell脚本。在其中,我可以调用其他shell脚本,如: ./run_1.sh ./run_2.sh ......... 如果我通过./run.sh调用脚本,我发现实际上它将使用不同的PID顺序调用脚本中的不同任务(即,run_1.sh将是一个任务,run_2.sh将是另一个任务)。这使我无法使用一个“kill”命令杀死整个任务组,或通过运行“/run.sh&”在后台运行整个任务组。 那么,有没有一种方法可以将脚本作为一个完整的任务来运行呢? pkill可以使用-p

我有一个名为run.sh的shell脚本。在其中,我可以调用其他shell脚本,如:

./run_1.sh
./run_2.sh
.........
如果我通过./run.sh调用脚本,我发现实际上它将使用不同的PID顺序调用脚本中的不同任务(即,run_1.sh将是一个任务,run_2.sh将是另一个任务)。这使我无法使用一个“kill”命令杀死整个任务组,或通过运行“/run.sh&”在后台运行整个任务组。 那么,有没有一种方法可以将脚本作为一个完整的任务来运行呢?

  • pkill
    可以使用
    -p
    选项来杀死进程的子进程

    pkill -P $PID
    
    其中,$PID是父进程的PID

  • 您可以
    source
    运行
    run_1.sh
    命令,使其在同一个shell中执行(这可能会产生副作用,因为现在所有脚本都将共享相同的作用域)

      • pkill
        可以使用
        -p
        选项来杀死进程的子进程

        pkill -P $PID
        
        其中,$PID是父进程的PID

      • 您可以
        source
        运行
        run_1.sh
        命令,使其在同一个shell中执行(这可能会产生副作用,因为现在所有脚本都将共享相同的作用域)


      但是您知道如果包含可执行文件的脚本调用a.out会怎么样吗。我应该使用./a.out还是源a.out?如果run_1.sh和run_2.sh还包含其他脚本(如run_1_1.sh),该怎么办?我应该对所有这些应用源代码吗?您只能在不使用
      source
      -ing的情况下运行可执行文件(因为它的ELF格式不是有效的sh语法),并且它将在自己的进程中运行。但是您知道如果包含可执行文件的脚本名为a.out会怎么样吗。我应该使用./a.out还是源a.out?如果run_1.sh和run_2.sh还包含其他脚本(如run_1_1.sh),该怎么办?我应该将源代码应用于所有这些进程吗?您只能在不使用源代码的情况下运行可执行文件(因为它的ELF格式不是有效的sh语法),并且它将在自己的进程中运行。根据定义,shell脚本是用于执行可执行文件的fork进程,因此它不能是单个PID。。。(即使shell进程有一个PID)。根据定义,shell脚本是用于处理进程(用于执行可执行文件)的分支,因此它不能是一个PID。。。(即使shell进程有一个PID)。