最も信頼できる方法は次のようです:
(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 を試すこともできます .