LINUX.ORG.RU

no kill timeout gtk bash

 , , ,


0

1

Не нашел ответа почему не работает на bash

gtkdialog3 –program=BOOKMARK_LIST

sleep 5

export PIDRIP=«ps -eo pid,cmd | grep -v grep | grep -e "BOOKMARK_LIST" | awk '{ print $1 }'»

kill $PIDRIP 2> /dev/null

Подскажите как можно реализовать

Ответ на: комментарий от nik120s

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

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

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

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

Я тебе написал выше как тебе переписать твой скрипт.

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

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

Увы, я не вижу, что ты там написал и что возвращают команды.

У меня нет телепатии и гадать я не умею.

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

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

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

nik120s
() автор топика
Ответ на: комментарий от nik120s

Ты понимаешь по русски?

Покажи то, что ты написал.

kostik87 ★★★★★
()

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

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

100%

Он так и не написал запуск своей программы в фоне.

Скорее всего.

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

А чего сам не сделал? А только писал: «увы, не работает»?

Если ты чего-то не понимаешь - изучай вопрос. Ответы тебе даны были точные.

kostik87 ★★★★★
()
Ответ на: комментарий от 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 ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.