ターミナルプログラムで実行されているコンテンツをバックグラウンドで送信する

ターミナルプログラムで実行されているコンテンツをバックグラウンドで送信する

端末で実行するスクリプトがあり、いくつかの出力が印刷されます。たとえば、キーを押さずに(そしてスクリプトを変更せずに)5秒後にバックグラウンドで送信したいとします。 Bashスクリプトのようにスクリプトを起動してしばらくスリープしてから、実行中のアプリケーションをバックグラウンドで送信します。いったんバックグラウンドに入ると、出力に気になりません。

UPD:うまくいかないもの:

  • nohup
  • afterスクリプトの使い方&- 出力がまだ端末に送信されている間、すぐにバックグラウンドで送信されます(これは私が避けたいものです)

答え1

他のプロセスの出力を他の場所にリダイレクトできる非ハッキング方法はありません[1]。ㅏ)プロセスをフォアグラウンドに戻す意図はありません。雨)catプログラムの実行中に他のプロセス(軽量)も実行できます。これにより、次のことができます。

{ your_program ... & } | (trap : INT; cat & sleep 5; kill $!; cat >/dev/null &)

プログラムのstderrとstdoutをyour_program 2>&1

[1] 可能なハッキングアプローチは、デバッガを接続し、その内部で出力をリダイレクトすることです。

答え2

今私は大きな誤解を見ています。作業は前景から始まり、5秒後に魔法のように背景に切り替える必要があると思いました。出力は重要ではありません。しかし、この答えを使用すると、出力は続きます... Qは「背景」や「出力なし」のように見えます。とにかくこれは興味深い:

このヘルパースクリプトを使用して「スリング」してください...

#!/bin/bash
sleep 1
pid=$(pidof -x counter.sh)
sleep 3
kill -s STOP $pid
sleep 1
kill -s CONT $pid

... "counter.sh"というスクリプトを一時停止し、バックグラウンドで再起動することができます。通話内容は次のとおりです。

./suspender & ./counter.sh

「Suspender」はバックグラウンドで始まり、カウンタが実行されるまで1秒間待ちます。 pidを取得して3秒間待ちます(必要に応じて遅延)。 STOP信号はctrl-ZCONT信号に対応しますbg。中途半端な睡眠が必要です。

Counter は Ctrl-C を頻繁に押して数秒間視聴したいプログラムです。 5秒後にプロンプ​​トがオフになります。出力は重要ではありません。これはわずか10個の数字を印刷し、ますます遅くなります。

#!/bin/bash 
for i in {1..10}
do 
  sleep $i; echo $i
done

ジョブ制御メッセージと出力が続くと気分が悪くなります。

一時停止 - 再開 - in-bg 操作の前に ctrl-c を使用してスクリプトを停止し、その後プロンプトを使用できます。ほとんど意味があります...

答え3

.desktop設定ファイルを作成し、それをbashファイルに関連付けることができます。これにより、シェルファイルを実行でき、端末で開かれません。端末で開かないようにTerminal=True変更してください。Terminal=False「anyfile.dekstop」というファイルに次のように入力して実行可能にします(右クリック - プロパティ - ファイルをプログラムとして実行できます)。

【デスクトップ入口】

バージョン=1.0

Exec="実行ファイルまたは.shファイルへのパス"

名前=サンプル

一般名=はい

コメント=すべてのコメント

エンコーディング= UTF-8

ターミナル=偽

タイプ=アプリケーション

カテゴリ=アプリケーション

アイコン=ランダムアイコンリンク

関連情報