Ubuntu

如何在 Windows WSL (Ubuntu1804) 中在後台執行 Linux 命令

  • January 24, 2019

為了將一些 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 放在其他地方。

引用自:https://serverfault.com/questions/950598