Ubuntu
如何在 Windows WSL (Ubuntu1804) 中在後台執行 Linux 命令
為了將一些 Linux 優勢帶給執行 Windows 10 的客戶,我開發了一些 bash 腳本來自動化他們的一些日常任務。
我曾經讓他們通過具有以下內容的 Windows 批處理執行腳本:
Ubuntu1804 run /usr/local/bin/script.sh
不幸的是,有些腳本需要很長時間,無論是針對大型 sql 查詢還是緩慢的網路和 I/O 操作,在此等待期間,一些使用者無法避免關閉“奇怪的黑色視窗”,從而終止了程序。
上面的命令即使在結尾加上 & 引號也會被殺死。
我嘗試了以下操作,但沒有進入
testOK
我的桌面。Ubuntu1804 run "sleep 10 && touch /mnt/c/Users/myuser/Desktop/testOK &"
雖然這會使視窗保持打開狀態並
testOK
改為創建文件。Ubuntu1804 run "sleep 10 && touch /mnt/c/Users/myuser/Desktop/testOK"
我想知道是否有辦法避免 Ubuntu WSL 中的程序在視窗關閉後立即被終止。
完全阻止視窗出現也會很棒。
阻止使用者與之互動將是一種可接受的解決方法。
客戶是具有最新安全和質量匯總的 Windows 10 專業版,我沒有提供站點詳細資訊,因為這發生在不止一個客戶身上,其中一些是大型 MS AD 域,另一些是只有一個工作組的小型辦公室。
當終端視窗關閉時,Linux X11 向正在執行的程序發送一個 SIGHUP,這些程序的文件句柄打開到終端視窗。預設情況下,所有程序都向生成程序的終端視窗打開標準輸入、標準輸出和標準錯誤文件句柄。WSL 模擬了這種行為。
一種解決方案是使用“nohup”。如果 test.sh 是:
#!/bin/sh sleep 10 touch ~/testOK
然後你可以像這樣執行它:
D:> ubuntu run nohup sh -x ~/test.sh &
如果我在輸入該行後立即關閉 cmd 視窗,我會在 D:(我目前的工作目錄)中獲得一個文件“nohup.out”,其中包含由 test.sh 生成的文本,幾秒鐘後在我的 Ubuntu 中獲得 testOK主目錄。您可以在 .bat 腳本中進行更改,以將 nohup.out 放在其他地方。