私はLyXドキュメントを管理するためにRubyスクリプトを書いています。スクリプトはユーザー(= me)と簡単なCLI対話を実行し、開くファイル名を決定し、lyx
シェルコマンドを介して開きます。
今の問題は、CLIの対話に端末が必要ですが、端末を閉じると、LyXが「SIGHUP信号をキャプチャします!こんにちは」というメッセージボックスを表示することです。をクリックするとOK
LyX が閉じます。
この問題は、Rubyのコマンドを介してシェルを起動したときに発生しますexec
(Rubyプロセスを閉じて、指定されたシェルコマンドに対して新しいプロセスを開始します)。フォークに交換しようとしたときにLyXウィンドウが開かなかった。SIGHUP
Rubyスクリプトが完了し、端末が閉じたときにLyXがそれを受け取ったと推測しました。これをgets
防ぐために、Rubyスクリプトの最後にコマンドを追加したときにこの推測を確認しました。閉じる - LyXウィンドウが開き、Enter
Rubyスクリプトの終了をクリックするとLyXがそれを受け取りSIGHUP
閉じます。
これで、CLIインタラクションをGUIに置き換えてターミナルウィンドウを削除すると、この問題を解決できます。しかし、同様の操作を行うためにGUIを使用することは私にとっては過剰なようです。それでは、端末を閉じるときにLyXが閉じないようにする方法はありませんか?
私はKDEを使用してOpenSUSE 12.1 64ビットを実行しています。端末エミュレータはKonsoleです。
ベストアンサー1
1つのオプションはnohupを使用して実行することです。
nohup mycoollittlescript
別の方法は、tmuxやscreenなどの端末エミュレータ内で実行することです。これらの端末アプリケーションは、端末エミュレータ自体です。親端末が閉じても、まだバックグラウンドで実行され、他の端末ウィンドウから再接続できます。この試み:
screen -R -d NameOfMyBackgroundJob
最初は新しいセッションが作成されます。上記のコマンドを繰り返し使用すると、既存のセッションに接続され、他の端末ウィンドウとの接続が切断されます。