linuxshell函數返回
❶ Linux system 函數
最近工作中在 Linux 下,某些指定的程序需要調用指定的 shell 腳本完成指定工作,以前也曾經做過類似的功能,調用 system 函數執行指定的腳本,以前並不關心 shell 腳本是否執行成功了,現在的功能需要根據 shell 腳本執行成功與否,於是查詢了下 system 函數的說明,有此文以做筆記之用。
功能:調用/bin/sh -c 執行指定的腳本 command
常規使用方法:
關於返回值:
答案是 都錯
man手冊
看著挺暈的,但是如果對於 system 的執行過程了解的話,就很容易理解了,函數執行分為以下幾個階段。
階段1:創建子進程等准備工作。如果失敗,返回-1
階段2:調用 /bin/sh 拉起腳本,如果拉起失敗或者shell未正常執行,原因值被寫入ret中
階段3:如果 shell 腳本執行成功, shell 腳本的返回值寫入ret中
從上面可知,不管 shell 腳本返回什麼值,只要調用了/bin/sh,並且執行過程沒有被信號中斷,都算正常結束。因為腳本是在子進程中執行的,所以要想獲取腳本是否執行成功的方法只能用系統提供的兩個宏。
由於我們一般在 shell 中會通過返回值判斷腳本是否執行成功,成功返回0,成功返回整數。所以判斷一個腳本是否執行成功,應該滿足三個條件:
注意:當 shell 腳本不存在時、沒有執行條件等,前兩個條件也會成立,此時WEXITSTATUS(ret)為127,所以shell腳本中不能將127作為返回值,shell腳本中的異常返回值最好從1開始遞增,成功返回0。
system 用起來,看則簡單,實則不那麼簡單,有很多隱藏的坑,需要自己深入理解原理,才能更好地使用,也可以用其他實現方式完成相同的功能。
最後對自己說,多寫,多思,多總結