スクリプトがあります
$ cat PDFX.sh
#! /bin/bash
wine /home/t/pdfxcview/PDFXCview.exe
対話型 bash シェルで、次を実行します。
$ ./PDFX.sh &
[1] 21740
それでは殺してみてください。
$ kill $(jobs -p)
[1]+ Terminated ./PDFX.sh
「終了しました」と表示されますが、プログラムはPDFXCview.exe
影響を受けずに実行され続け、シェルを終了した後も生き残ることができます。
$ exit
wine /home/t/pdfxcview/PDFXCview.exe
スクリプトを置き換えても、コマンドとシェルのシャットダウンは維持evince
されません。kill
wine /home/t/pdfxcview/PDFXCview.exe &
対話型 bash シェルから直接実行しても、kill
コマンドとシェルの終了は維持されません。
なぜ違いがあるのか知りたいです。
私はそれについて特別なことがないと思いますwine
。
答え1
走る
wine /home/t/pdfxcview/PDFXCview.exe
explorer.exe
通常、Windowsバイナリ(など)が期待する一般的なWindows環境を提供するために、いくつかのプロセスが開始されます。 Wineはこれらすべてのプロセスを開始し、すべてをwineserver
分離することによってこれを行います。したがって、そのプロセスはシェルでもシェルの子プロセスでもありませんwineserver
。 Wineに実行を要求したバイナリは、シェルの子プロセスである可能性がありますが、親プロセスよりも長く続く可能性があることも拒否されました。これらすべてのプロセスを開始したシェルを終了しても影響はありません。
Windowsプログラムを終了するには、そのプログラムのpidを見つけて直接終了する必要があります。あなたは殺すことができますみんなワイン加工プロセスではwineserver -k
。
を実行すると、PDFX.sh &
スクリプトを処理するために新しいシェルが起動し、そのシェルはWineを実行して起動しますPDFXCview.exe
。を実行すると、kill %1
Wine プロセスではなくスクリプトを実行しているシェルが終了します。 Wineプロセスは引き続き実行されます(pid 1に変更されます)。
を実行するとwine /home/t/pdfxcview/PDFXCview.exe &
Wine プロセスが直接起動します。後で実行するとkill %1
Wine プロセスが終了し、Windows プログラムが停止します。実行中の他のWindowsプログラムがない場合は、wineserver
すぐに終了してください。