所以我正在創建一個基本的shell。我fork並調用execvp。如果一個命令(即sleep 5m &
)最後有「&」,我的父進程不會等待子進程。否則它。所以在孩子的過程中,我打電話給execvp(args[0],args)
。如果參數爲sleep 5m &
,如何刪除&,以便子進程只讀取而不是&,因爲我猜測問題來自哪裏。無效的時間間隔&在我創建的基本shell中
if(pid==0){
execvp(args[0],args);
}
//if parent process
if(!(strcmp(args[0],"&")==0)){
wait(0);
}
編輯:我是能夠通過使用標誌來解決它,如果用戶輸入包括&,我打開標誌。現在,它的工作原理
只是描述散文的代碼幾乎是永遠不夠清晰(散文,不像代碼,可以替換它以多種方式解釋)。請顯示代碼的[最小完整且可驗證的示例](https://stackoverflow.com/help/mcve),以說明問題。 – kaylum
你寫的代碼是什麼?請至少張貼您面臨問題的代碼片段。這樣,我們可以幫助你更好 –
簡單的搜索是一個非常糟糕的主意。如果'&'被轉義或字符串文字會怎麼樣?您需要正確解析輸入。語句的實際執行在設計解釋器(shell是)方面的工作較少。 – Olaf