为了将一些 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 是:
然后你可以像这样运行它:
如果我在输入该行后立即关闭 cmd 窗口,我会在 D:(我当前的工作目录)中获得一个文件“nohup.out”,其中包含由 test.sh 生成的文本,几秒钟后在我的 Ubuntu 中获得 testOK主目录。您可以在 .bat 脚本中进行更改,以将 nohup.out 放在其他地方。
您可以像这样创建一个 .vbs 文件:
最后一行,“0”表示不显示窗口,“1”表示显示窗口。
我认为这应该完成您正在尝试做的事情。