ウィンドウ情報を送信するバックグラウンドプロセスで若干の遅延が発生します。どのように管理しますか?

ウィンドウ情報を送信するバックグラウンドプロセスで若干の遅延が発生します。どのように管理しますか?

次のコマンドを実行すると:

...
geany --new-instance --no-msgwin --no-session --no-terminal -c pathtoconfig/ &
pid=$!
echo $pid
wmctrl -lp
read -p "waiting..."
...

生成されたPIDが開始されたプロセスのPIDと一致しませんgeany。ただし、sleep 1PIDを読み取る前に(geanyこの行の後に)コマンドを挿入すると、PIDは正しいです。その理由は、ウィンドウに時間がかかるため、提供されたwmctrl -lp予備情報が正確なPIDを正確に提供できないためです。新しいウィンドウが安定し、wmctrlそれを実現する前にgeanyが起動するのを待つ最良の方法は何ですか?

アップデート: - Lubuntu 16.04 / HP ProBook 6360bで動作します。

  • wmctrl -lpリストにあるPIDを含む実際のPIDと比較してください。

  • PIDはによって正確に取得され、$!更新に時間がかかることが提供され、まるでウィンドウマネージャがPIDを更新するのに時間がかかるようにwmctrl -lp一定時間(約0.27秒geany、約0.16秒)後に変わります。leafpad

ベストアンサー1

xdotool search --sync --pid "$PID"あなたが望むものを正確にします。この方法を見つけました。ここ

- 同期- 結果が出るまでブロックします。これは、アプリケーションを実行してアプリケーションウィンドウが表示されるのを待ちたい場合に便利です。

型:

#!/bin/bash

geany &
PID=$!

if xdotool search --sync --pid "$PID" > /dev/null; then
     # if window with the specific PID has appeared
     # then doing something here
fi

メモ:

Netbeansたとえば、次の理由で一部のアプリケーションには適していません。

--pid PID- 特定のプロセスIDに属するウィンドウと一致します。これは、ウィンドウにこのメタデータを設定していない一部のXアプリケーションでは機能しない可能性があります。

または--pid "$PID"に変更しても機能します。--name netbeans--class netbeans

実際のケース:

このスクリプトは、geany &開始ウィンドウとgeanyウィンドウが表示されるまでの遅延時間をミリ秒単位で計算します。

#!/bin/bash

geany &
PID=$!
time_start=$(date '+%s%3N')
if xdotool search --sync --pid "$PID" > /dev/null; then
    time_end=$(date '+%s%3N')
    time_interval=$((time_end - time_start))
    printf "%'d ms\n" "$time_interval"
fi

出力:

$ ./delay_calculate.sh 
553 ms

おすすめ記事