2014-04-02 104 views
2

C程序:C程序叉,等待golang進程狀態

pid = fork(); 

if (pid == 0) { 
    execv("Golang Process"); 
} else (pid > 0) { 
    wait(&status); 
    printf("process %d status: %d\n", pid); 
} 

Golang計劃:

func main() { 
    ...... 
    os.Exit(1) 
} 

但是,輸出是: 過程XXX狀況:256

如果設置操作系統。退出(2),輸出爲: 進程XXX狀態:512

if set os.Ex它(3)的輸出是: process XXX status:768

爲什麼?

回答

4

wait manual

如果狀態不爲空,wait()waitpid()狀態信息 在它所指向的int值。 這個整數可以用 下列宏檢查(內搭整數本身作爲參數,而不是一個 指向它,因爲在wait()waitpid()進行!)

WIFEXITED(status)返回true如果孩子終止通常, 是通過呼叫exit(3)_exit(2),或通過從main()返回。

WEXITSTATUS(status)返回孩子的退出狀態。這個 由exit(3)_exit(2)main()中返回語句的參數 參數指定的狀態參數 的最低有效8位組成。如果WIFEXITED返回true,則此宏應該僅使用 。

您的問題無關golang,你只需要使用這些宏來提取狀態代碼:

if (WIFEXITED(status)) { 
    printf("process %d status: %d\n", pid, WEXITSTATUS(status)); 
}