最も信頼できる方法は次のようです:
(setsid emacs &)
これは ( &)
を使用します バックグラウンドに分岐し、setsid
制御 tty から切り離します。
これをシェル関数に入れることができます:
fork() { (setsid "[email protected]" &); }
fork emacs
可能性は次のとおりです:
-
disown
組み込みコマンド:emacs & disown $!
&
コマンド区切りとして機能し、disown
デフォルトでは最新のジョブになるため、次のように短縮できます:emacs & disown
-
Double-
fork()
:(emacs &)
括弧内のコマンド
(
)
別のシェル プロセスで実行されます。 -
setsid
新しいセッションを作成してプロセスの制御 TTY の設定を解除するため、Rich が提案したように、これが最良の選択である可能性があります。setsid emacs
ただし、これは少し予測不可能でもあります -
fork()
しかありません。 プロセス グループのリーダーの場合はバックグラウンドへ (setsid
の場合は発生しません)sh
で使用されます たとえば、スクリプト。そのような場合、単に Ctrl-C に抵抗するようになります。)
これが X アプリとして実行されているのか、コンソール アプリとして実行されているのかは言及されていません。
コンソール アプリの場合は、もちろん閉じる必要があります。入力/出力、より技術的には、それがオンになっていた(疑似)ttyを取り除きました。これがあなたの意図したものである可能性は非常に低いので、X アプリについて話していると仮定しましょう。
nohup
動作するはずですが、動作しない理由はわかりません。シェルが閉じると、SIGHUP
が送信されます そのプロセス グループ内のすべてのプロセスに。 nohup は、SIGHUP を無視するようコマンドに指示します。
また、プロセス グループからプロセスを切断する setsid を試すこともできます
alias emacs='setsid emacs'
または disown
を追加 &
の後
シェルの設定を確認してください。 nohup
の代わりに screen を試すこともできます .