ctrl+z
はアプリを停止し、bg
コマンドを使用してアプリをバックグラウンドに送信できますが、これはアプリが停止するまでに少し時間がかかることを意味します。
アプリを停止せずに直接バックグラウンドに送信するにはどうすればよいですか?
アプリケーションをフォアグラウンドからバックグラウンドに送信するには、ターミナルとシェルの両方からの協力が必要です。シェルはフォアグラウンドプロセスグループを設定する必要があるため、ターミナルはそれを単独で行うことはできません。ターミナルはキープレスを処理する必要があるため、シェルは単独でそれを行うことはできません(シェルはフォアグラウンドにないため、キープレスを受信できません)。
近似は、アプリケーションをバックグラウンドに非常に高速に送信することです。結局のところ、アプリケーションは他の人とCPU時間を共有し、数百分の1秒の一時停止は問題になりません。 (これは、リアルタイムアプリケーション用です。必ずバックグラウンドで開始してください。)シェルバインディングを使用して Ctrl+Z 最後にフォアグラウンド化されたジョブをバックグラウンドに送信します。そのように、押す Ctrl+ZCtrl+Z 最小限の一時停止時間でジョブをバックグラウンドに送信します。
これが私のzshバインディングです。これも コマンドラインが空でない場合に、ハーフタイプのコマンドの「バックグラウンド」 です。
fancy-ctrl-z () {
emulate -LR zsh
if [[ $#BUFFER -eq 0 ]]; then
bg
zle redisplay
else
zle Push-input
fi
}
zle -N fancy-ctrl-z
bindkey '^Z' fancy-ctrl-z
英語で、オーディエンスの非zshユーザーの場合:
次のことを行うシェル関数を定義します。
この関数をバインドします Ctrl+Z。
コマンドラインが空であるかどうかに関係なく、バックグラウンド動作のみが必要な場合:
function bg_ { builtin bg "$@"; }
zle -N bg_
bindkey '^Z' bg_
Bashで同じことができるかどうかはわかりません。 bind -x '"\C-z": bg'
と同じくらい簡単でなければなりませんが、bashはttyストップ文字をそのままにしておくため、 Ctrl+Z 入力として。
タスクの後に&
を追加すると、タスクのバックグラウンドを設定できます。
たとえば、tail -f /var/log/messages &
はタスクをすぐにバックグラウンドで実行します。
いつものように、jobs
コマンドでバックグラウンドにしたタスクを確認できます。
もちろん、これはまだコマンドを実行していないことを前提としています。
コマンドの背景には、コマンドにアンパサンドを追加します。
sleep 300 &
すでに実行されている場合は、それを停止してからバックグラウンドで実行するしかありません。