Bạn có thể sử dụng một số công cụ có thể nhận id cửa sổ được liên kết với PID và đợi cho đến khi cửa sổ đó được tạo. Id quá trình của chương trình đã bắt đầu trước đó có sẵn trong $!
biến.
Ví dụ - sử dụng wmctrl
một người có thể lấy danh sách tất cả các cửa sổ và kiểm tra xem có bất kỳ cửa sổ nào được khởi động bằng cách đưa ra PID không:
$ wmctrl -lp
0x00e00003 -1 397 jjmach sawfishpager
0x01200003 6 399 jjmach wmctrl -lp jimmij@jjmach: /proc
0x0180004b 0 655 jjmach emacs@jjmach.jj
0x02800078 7 680 jjmach How to measure Firefox's startup time? - Mozilla Firefox
Id cửa sổ nằm trong cột đầu tiên và xử lý id ở vị trí thứ ba, vì vậy chúng ta cần chuyển nó sang awk
để kiểm tra xem id quy trình đã cho có cửa sổ liên kết hay không.
wmctrl -lp | awk -v pid="$!" '$3==pid{print "Window is created with id "$1}'
Bây giờ chúng ta cần đặt nó trong một số vòng lặp và đo thời gian cho đến khi lệnh trên sẽ kết thúc thành công:
firefox & time (while wmctrl -lp | awk -v pid="$!" '$3==pid{exit 1}'; do :; done)
Vì vậy, chúng tôi bắt đầu firefox và ngay lập tức bắt đầu một vòng lặp mà trong cơ thể không có gì ( :
) và kết thúc khi awk
trả về giá trị khác không.