【问题标题】:Bash script/gcc - sync with environmental variables and gnome-terminal doesn't workBash 脚本/gcc - 与环境变量同步并且 gnome-terminal 不起作用
【发布时间】:2015-05-02 01:56:43
【问题描述】:

我正在尝试使用环境变量来同步多个进程。我看到 bash 脚本将 RUN_NOW 变量设置为 1,但 C 脚本从未看到它并停留在无限循环中。

另外,你知道为什么 bash 脚本中的 gnome-terminal 行不起作用吗? (xterm 命令确实有效)。

感谢您的建议,

珍妮

来自 myT 的 C 代码 (我有 n 个进程,每个进程有 m 个线程;每个线程执行这段代码)

pEnvRun_Now = EnvRun_Now;
pEnvRun_Now = getenv("RUN_NOW");
printf("RUN_NOW (string) = %s",pEnvRun_Now);
iRun_Now = atoi(pEnvRun_Now);
printf("RUN_NOW (int) = %d",iRun_Now);

while ( iRun_Now == 0){
    sleep(1);
    pEnvRun_Now = getenv("RUN_NOW");
    printf("RUN_NOW (string) = %s\n",pEnvRun_Now);
    iRun_Now = atoi(pEnvRun_Now);
    printf("RUN_NOW (int) = %d\n",iRun_Now);
}

Bash 脚本

    else
        export RUN_NOW=0
        echo "RUN_NOW = $RUN_NOW"
        Num_Procs=$1
        Num_Threads=$2
        Elapsed_Secs=60
        Priority=$3
        echo "Num_Threads = $Num_Threads"
        echo "Elapsed_Secs = $Elapsed_Secs"
        echo "Priority = $Priority"
        if [[ $4 -eq 0 ]]; 
        then
            echo "Schedule $4 = FIFO"
        else
            echo "Schedule $4 = Round Robin "
        fi
        for (( i = 0; i < $Num_Procs; i++ )); do
            xterm -e ./myT "$Num_Threads" "$Elapsed_Secs" "$Priority" "$4" &
            gnome-terminal -x sh -c  ./myT "$Num_Threads" "$Elapsed_Secs" "$Priority" "$4" &
            gnome-terminal -x sh -c  "./myT $Num_Threads $Elapsed_Secs $Priority $4" &
        done
        export RUN_NOW=1
        echo "RUN_NOW = $RUN_NOW"
        wait
    fi

【问题讨论】:

    标签: bash gcc environment-variables gnome-terminal


    【解决方案1】:

    对于环境部分,我相信子shell会得到一份环境的副本。这是一种“按值传递”而不是“按引用传递”。一旦环境交给孩子,他们就不会再交叉。父母不再触及孩子,孩子也无法影响父母。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多