我已經構建了一個bash腳本來啓動我的系統中的一些進程。它只是調用進程和相關的配置文件。和我從命令行調用的一樣。從shell調用腳本和使用system()之間有什麼區別?
#!/bin/bash
# Start specified process in a new session
setsid $1 &>/dev/null &
所以啓動someprocess
,我會在命令行稱:
[email protected]:~# start someprocess
這就像一個魅力。每一個過程,每一次。但是當我從一個不同的正在運行的C++進程調用system
時,someprocess
永遠不會啓動。
system("start someprocess")
這種方法對我的90%的過程,除了一個。在工作和非工作過程中唯一的區別在於非工作過程使用下面的專有庫。我最近將setsid
選項添加到了bash腳本中,希望開始一個新的會話會有所幫助,但它沒有任何區別。我也試過popen
和execv
。不用找了。
所以我的問題是調用某些東西與system()
,只是從命令行進行相同的調用有什麼區別?
所有過程都用C++編寫Linux上。
有什麼不同:也許是環境? –
你有沒有檢查通常的嫌疑犯 - 權限,LD_PATH,環境變量等? C++系統包裝是相同的用戶和/或根等等?你從系統,popen,execv等得到什麼樣的errno值? – Duck
@Kerrek SB,@Duck在'〜/中設置了環境變量。bashrc'這個程序,當我用'system()'開始我的程序時,如何確保/檢查它們是否被設置?我認爲調用bash腳本意味着'bashrc'源自 –