等待一个进程完成并执行另一个进程

ak

我想在进程之间进行同步,我的计算机有2个核心,用户可以从命令行输入仿真编号,如果输入大于2,则第3个和其余进程必须等到其中一个进程完成为止。如果其中一个完成,则应该执行下一个进程,例如,前两个进程已经在进行中,可以说,第一个已经在第二个进程之前完成了,现在应该执行第三个进程。可以看到没有找到anywait命令,该怎么办?这是我的脚本:

#!/bin/bash
# My first script

count=2
echo -n "Please enter the number of simulation :"
read number
echo "Please enter the algorithm type  "
printf "0 for NNA\n1 for SPA\n2 for EEEA :"

while read type; do
    case $type in
        0 ) cd /home/cea/Desktop/simulation/wsnfuture 
        taskset -c 0 ./wsnfuture -u Cmdenv omnetpp.ini > /home/cea/Desktop/simulation/RESULTS/NNA/NNA0/0 &
        taskset -c 1 ./wsnfuture -u Cmdenv omnetpp.ini > /home/cea/Desktop/simulation/RESULTS/NNA/NNA0/1 &
        while [ $count -lt $number ]; do
        anywait
            cd /home/cea/Desktop/simulation/wsnfuture 
        mkdir /home/cea/Desktop/simulation/RESULTS/NNA/NNA$count
        taskset -c $((count % 2)) ./wsnfuture -u Cmdenv omnetpp.ini > /home/cea/Desktop/simulation/RESULTS/NNA/NNA$count/$count &
            count=$((count + 1))
        done 
        ;;
        1 ) while [ $count -lt $number ]; do
            cd /home/cea/Desktop/simulation/wsnfuture1
        taskset -c $((count % 2)) ./wsnfuture -u Cmdenv omnetpp.ini > /home/cea/Desktop/simulation/RESULTS/SPA/$count &
            count=$((count + 1))
        done 
        ;;
        2 ) while [ $count -lt $number ]; do
            cd /home/cea/Desktop/simulation/wsnfuture2
        taskset -c $((count % 2)) ./wsnfuture -u Cmdenv omnetpp.ini > /home/cea/Desktop/simulation/RESULTS/EEEA/$count &
            count=$((count + 1))
        done 
        ;;
        * ) echo "You did not enter a number"
        echo "between 0 and 2."
        echo "Please enter the algorithm type  "
        printf "0 for NNA\n1 for SPA\n2 for EEEA :"

    esac

done

function anywait(){
 while ps axg | grep -v grep | grep wsnfuture> /dev/null; do sleep 1; done
} 
伊尼安

您可以通过一种简单的过程同步方式,bash使用wait该方法等待一个或多个后台作业完成,然后再运行下一个。

通常,您可以通过在&命令末尾附加运算符来在后台运行作业该点处的PID新创建的后台进程(进程ID)被存储在一个特殊的bash变量:$!wait命令允许此过程以运行下一个指令之前终止。

这可以通过一个简单的例子来证明

$ cat mywaitscript.sh

#!/bin/bash

sleep 3 &

wait $!     # Can also be stored in a variable as pid=$!

# Waits until the process 'sleep 3' is completed. Here the wait on a single process is done by capturing its process id

echo "I am waking up"

sleep 4 &
sleep 5 &

wait                    # Without specifying the id, just 'wait' waits until all jobs started on the background is complete.

echo "I woke up again"

命令输出

$ time ./mywaitscript.sh
I am waking up
I woke up again

real    0m8.012s
user    0m0.004s
sys     0m0.006s

您可以看到该脚本花了大约8秒钟才能运行完毕。时间的细分是

  1. sleep 3 将花费整整3秒钟来完成其执行

  2. sleep 4并且sleep 5都依次一个接一个地开始,并且花费了大约5秒的max(4,5)来运行。

您可以对上述问题应用类似的逻辑。希望这能回答您的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在执行另一个之前等待 SwingWorker 完成

来自分类Dev

等待进程被杀死以启动另一个进程

来自分类Dev

当另一个子进程完成时,如何终止子进程?

来自分类Dev

一个进程如何阻止另一个进程(该进程产生)?

来自分类Dev

Python:一个线程中的进程停止另一个线程中的进程完成

来自分类Dev

等待一个请求完成,然后在 angularjs 中执行另一个请求

来自分类Dev

Oracle APEX ARP进程不是仅由于另一个进程失败而执行吗?

来自分类Dev

从另一个进程重新启动一个进程

来自分类Dev

为什么一个进程被另一个进程挂起?

来自分类Dev

为什么一个进程被另一个进程挂起?

来自分类Dev

限制一个进程访问另一个进程?

来自分类Dev

一个python进程为另一个python进程提供信息

来自分类Dev

Apache Camel Exchange从一个进程传播到另一个进程

来自分类Dev

将数据发送到等待ppoll的另一个进程的stdin

来自分类Dev

将File保留为Socket并等待直到从另一个进程写入结束

来自分类Dev

在数据库事务期间等待另一个进程

来自分类Dev

bash-执行多个进程,然后执行另一个

来自分类Dev

等待一个进程完全启动

来自分类Dev

延迟初始化脚本,直到完成另一个进程?

来自分类Dev

我如何等待 Rust `Child` 进程的标准输出已通过管道传输到另一个进程?

来自分类Dev

如何杀死另一个用户的后台进程?

来自分类Dev

从另一个进程中查找变量的地址

来自分类Dev

C ++:读取另一个进程的内存

来自分类Dev

在Windows上从节点关闭另一个进程

来自分类Dev

删除另一个进程正在使用的图像

来自分类Dev

如何获取另一个进程MessageBox的消息?

来自分类Dev

删除被另一个进程锁定的文件

来自分类Dev

采用另一个进程的子窗口

来自分类Dev

另一个进程使用的文件C#

Related 相关文章

  1. 1

    在执行另一个之前等待 SwingWorker 完成

  2. 2

    等待进程被杀死以启动另一个进程

  3. 3

    当另一个子进程完成时,如何终止子进程?

  4. 4

    一个进程如何阻止另一个进程(该进程产生)?

  5. 5

    Python:一个线程中的进程停止另一个线程中的进程完成

  6. 6

    等待一个请求完成,然后在 angularjs 中执行另一个请求

  7. 7

    Oracle APEX ARP进程不是仅由于另一个进程失败而执行吗?

  8. 8

    从另一个进程重新启动一个进程

  9. 9

    为什么一个进程被另一个进程挂起?

  10. 10

    为什么一个进程被另一个进程挂起?

  11. 11

    限制一个进程访问另一个进程?

  12. 12

    一个python进程为另一个python进程提供信息

  13. 13

    Apache Camel Exchange从一个进程传播到另一个进程

  14. 14

    将数据发送到等待ppoll的另一个进程的stdin

  15. 15

    将File保留为Socket并等待直到从另一个进程写入结束

  16. 16

    在数据库事务期间等待另一个进程

  17. 17

    bash-执行多个进程,然后执行另一个

  18. 18

    等待一个进程完全启动

  19. 19

    延迟初始化脚本,直到完成另一个进程?

  20. 20

    我如何等待 Rust `Child` 进程的标准输出已通过管道传输到另一个进程?

  21. 21

    如何杀死另一个用户的后台进程?

  22. 22

    从另一个进程中查找变量的地址

  23. 23

    C ++:读取另一个进程的内存

  24. 24

    在Windows上从节点关闭另一个进程

  25. 25

    删除另一个进程正在使用的图像

  26. 26

    如何获取另一个进程MessageBox的消息?

  27. 27

    删除被另一个进程锁定的文件

  28. 28

    采用另一个进程的子窗口

  29. 29

    另一个进程使用的文件C#

热门标签

归档