$?和bash中的后台函数

时间:2017-08-31 08:22:02

标签: bash shell scripting

$如何?表现在后台执行的功能?

想象一下,我有以下功能:

TableA | TableB
A      |     4
B      |     2
C      |

我用这种方式多次调用它:

#!/usr/bin/env bash
doInBackground() {
    #We call a function
    someOtherFunction someParam
    if [ $? -eq 1 ]; then
        echo "was one"
    else
        echo "was not one"
    fi
}

如果他们同时执行,$ $会是什么?返回?是否会受到其他处决的影响?在这种情况下的行为是什么?

2 个答案:

答案 0 :(得分:1)

不,如果程序同时运行,它会自行运行,因此其他程序对它没有影响。执行时

someOtherFunction someParam

之后$?保存此脚本执行的函数的值。为什么?在新shell 中添加&运行进程,并且不同的shell实例之间不进行通信。这就像你打开几个终端并在每个终端窗口运行doInBackground一次。

换句话说,让我们说例如sshd正在运行,有人登录ssh并且访问日志正在存储。在它之后你会调用$?,期望返回你运行的进程的退出代码,但ssh日志在你的程序之后完成了万亿分之一秒......获取它是不是很奇怪退出状态ssh而不是您的计划? ;)

答案 1 :(得分:0)

重点:"如果没有给出 N ......返回代码为零。"

public class MySyncClass extends SyncObject{
   private String myData;

   public MySyncClass(){
       super();
       this.myData = "foo";
   }


   public String read(){
       super.acquireReadLock();
       String s = this.myData;
       super.releaseReadLock();
       return s;
   }

   public void write(String s){
       this.acquireWriteLock();
       this.myData = s;
       this.releaseWriteLock();
   }

}