まず第一に; プロセスを開始したら、最初に停止(ヒットCtrl- Z)bg
してからバックグラウンドで再開できるように入力することで、バックグラウンドで実行できます。現在は「ジョブ」であり、そのstdout
/ stderr
/ stdin
はまだ端末に接続されています。
プロセスの最後に「&」を追加すると、すぐにバックグラウンドでプロセスを開始できます。
firefox &
無音のバックグラウンドで実行するには、これを使用します:
firefox </dev/null &>/dev/null &
追加情報:
nohup
は、代わりにstdout / stderrをファイルに送信でき、親スクリプトを閉じても子がSIGHUPしないようにアプリケーションを実行するために使用できるプログラムです。ただし、アプリケーションを開始する前にそれを使用するための先見性が必要です。方法のためのnohup
作品は、あなただけではないことができ、実行中のプロセスに適用します。
disown
シェルのジョブリストからシェルジョブを削除するbashビルトインです。これは基本的に意味することは、使用できないことですfg
、bg
もうそれではなく、もっと重要なのは、あなたがあなたのシェルを閉じたときに、それがハングアップしたり送信しませんSIGHUP
もうその子に。とは異なりnohup
、プロセスの起動とバックグラウンド化後にdisown
使用されます。
あなたは何をすることができないん、それを立ち上げた後、プロセスの標準出力/標準エラー出力/ STDINを変更です。少なくともシェルからは。プロセスを起動して、そのstdoutがターミナル(デフォルトで行うこと)であることを伝えると、そのプロセスはターミナルに出力するように構成されます。シェルは、プロセスのFDセットアップとは関係ありません。これは、プロセス自体が管理するものです。プロセス自体は、stdout / stderr / stdinを閉じるかどうかを決定できますが、シェルを使用して強制的に閉じることはできません。
バックグラウンドプロセスの出力を管理するには、スクリプトから多くのオプションがあります。「nohup」が最初に思い浮かぶでしょう。しかし、対話型プロセスを開始するが、沈黙するのを忘れたfirefox < /dev/null &>/dev/null &
場合()、本当に多くのことを実行できません。
GNUを入手することをお勧めしますscreen
。画面を使用すると、プロセスの出力が面倒になったときに実行中のシェルを閉じて、新しいシェルを開くことができます(^Ac
)。
ああ、ところで、$@
あなたがそれを使用しているところで「」を使用しないでください。
$@
手段、$1
、$2
、$3
...、にあなたのコマンドをオンにします:
gnome-terminal -e "vim $1" "$2" "$3" ...
-eは引数を1つしか受け取らないため、これはおそらく望んでいないことです。$1
スクリプトが引数を1つしか処理できないことを示すために使用します。
シェルコマンド文字列である引数を1つしか受け取らないgnome-terminal -e
ため、()で指定したシナリオで複数の引数を適切に機能させるのは本当に困難-e
です。引数を1つにエンコードする必要があります。最良かつ最も堅牢であるが、かなりぎこちない方法は次のとおりです。
gnome-terminal -e "vim $(printf "%q " "$@")"