LINUX.ORG.RU
Ответ на: комментарий от nik120s

Запускай твой диалог в фоне.

Скорее всего, у тебя запущенное приложение держит консоль, пока ты его не закроешь твой слип и прочее выполняться не будет.

А ещё в bash ты можешь получить pid процесса, который предыдущей командой был запущен в фоне, поместить его в переменную и потом через 5 секунд убить.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Я тебе написал выше как тебе переписать твой скрипт. Pgrep отбирает процессы по имени сполняемого файла.

Увы,но не работает.Окно убивается только с терминала.

nik120s
() автор топика

Наверняка до sleep 5 выполнение даже не доходит. Это легко проверить, добавив перед ним echo с любой строчкой, или используя шебанг #!/bin/bash -x вместо #!/bin/bash. Тогда решением будет что-то на подобие

gtkdialog3 –program=BOOKMARK_LIST &
PID=$!
sleep 5
kill $PID
annulen ★★★★★
()
Ответ на: комментарий от nik120s
Ответ на: комментарий от annulen

Оставляя в стороне некоторую странность запуска gtkdialog именно таким образом, должен заметить, что утилита timeout уже не первый и не второй год как входит в coreutils. Кроме того, она позволяет по коду возврата определить, как именно закончилась запускаемая программа и избежать вываливания в stderr запускающего такого:

[abw@abw ~]$ sleep 300 & P=${!} ; sleep 5 ; kill ${P}
[1] 5443
[1]+  Завершено      sleep 300
[abw@abw ~]$ 
[abw@abw ~]$ timeout 5 sleep 300 ; echo RC=${?}
RC=124
[abw@abw ~]$ 

ABW ★★★★★
()
Ответ на: комментарий от ABW

Подход с бэкграунд-процессом гораздо гибче. Можно прибивать не просто по таймауту, а по условию. Если надо, можно использовать wait $!, получить код возврата, а потом делать что-то ещё.

annulen ★★★★★
()