2016-08-22 51 views
0

我用win10,如果它的事項,在bash(GIT)的Windows 10,殺子過程中,不能得到正確的PID

我有SH腳本:

start node ./e2e-tests/apimocker_runner.js & pid1=$! 
start npm run protractor -- --binaryPath=./build/appInstaller/win-unpacked/ & pid2=$! 

sleep 10 
kill $pid1 
kill $pid2 

當我通過嘗試終止進程PID我有錯誤:

bash: kill: (6616) - No such process 

據我所知在$!我們有最後一個子進程的PID,但這不工作。

曲子然後i型在bash:

start bash & pid=$! 
echo $pid 

$pid === 1000 (for example)

,但如果我在通過先前的命令創建的bash鍵入

echo $$ 

我還有一個PID

$$ ==== 1200 (for example)

另外我發現如果我輸入start bash這創建非子進程,但我想創建子進程並等待它們,就像wait $pid

我該如何做到這一點?

+0

這裏似乎沒有Power Shell的介入方式,如果確實如此,您需要解釋如何。與此同時,我改變了標題。 – tripleee

+0

可能重複http://stackoverflow.com/questions/12351702/how-to-write-a-bash-script-to-set-global-environment-variable – tripleee

+0

另外[不要使用'kill -9'] (http://www.iki.fi/era/unix/award.html#kill),只要'kill'就可以做到。 – tripleee

回答

0

在一個bash實例的變量集不在另一個bash實例,它是不是它的子進程(並且只有這時如果家長確實export variable將其暴露在兒童)可見。

+0

但問題是:我在第一個bash中輸入kill -9 $ myPid,在那裏我開始bash – artofatih

+0

'start bash'啓動一個不同的Bash實例。 'myPid'包含該Bash實例的PID(假設'start'保留PID;不確定這個細節)。如果這不是你想要的,請描述你真正想要的 - 代碼不符合你期望的是一種可怕的方式來解釋你*所期望的。 – tripleee

+0

我有2個腳本,另一臺計算機上我應該開始SH腳本, 那麼這一些命令,當我要殺死這2個過程 SH腳本調用2 bash的控制檯: 開始節點./e2e-tests/ .. 啓動npm運行量角器 當我想要2殺死這個進程,我檢查,pid在調用bash,它的didferent從pid我在$ pid在父bash中 – artofatih