У меня следующая проблема:
Я использую эмулятор терминала vte, запускаю там процесс bash, Затем из bash запускаю новый процесс (например, vim или gcc).
Мне необходимо определить, что вывод и вывод на терминал заблокирован процессом vim-а (или gcc), т.е. нужно определить активный процесс. Как это можно сделать?
У меня есть PID bash-a, я могу получить устройства ввода и вывода через /proc, но что с этим делать? Может есть другой способ?
Заранее спасибо!
Активный процесс терминала
Модератор: Модераторы разделов
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: Активный процесс терминала
Ну в голову пришло такое: находим всех детей баша, смотрим на их /proc/<pid>/fd/{0,1,2} и сравниваем с аналогичными симлинками баша. Но это как то расплывчато, вообще задача странная, честно говоря.
-
daa
- Сообщения: 23
- ОС: Fedora
Re: Активный процесс терминала
Задача в следующем:
необходимо выполнить синхронизацию текущей директории bash с некоторой другой директорией, синхронизацию я выполняю через передачу команды cd в bash.
Так вот мне нужно определить, есть ли запущенная команда, в этом случае синхронизацию выполнять не стоит.
Что то похожее делает mc, только я с ним не разобрался.
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: Активный процесс терминала
А зачем всё так сложно то? Я бы так примерно сделал:
Код: Выделить всё
#!/bin/sh
PIDFILE=/tmp/mysync.pid
if [ -r "$PIDFILE" ]; then
pid=`head -n1 "$PIDFILE"`
[ $? -eq 0 ] || { echo "Error reading $PIDFILE" >&2; exit 1; }
kill -0 "$pid" 2>/dev/null
[ $? -eq 0 ] && { echo "Synchronization already launched"; exit 0; }
fi
echo "$$" > $PIDFILE
[ $? -eq 0 ] || { echo "Error writing $PIDFILE" >&2; exit 1; }
# Do the synchronization
echo "Syncronization begun"
sleep 5-
diesel
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: Активный процесс терминала
daa писал(а): ↑09.04.2007 00:02Задача в следующем:
необходимо выполнить синхронизацию текущей директории bash с некоторой другой директорией, синхронизацию я выполняю через передачу команды cd в bash.
Так вот мне нужно определить, есть ли запущенная команда, в этом случае синхронизацию выполнять не стоит.
вобщем-то узнать есть ли в "родителях" нужный нам bash как-то так можно попробовать:
if [ "`ps -ef|awk '{print $3}'|grep $pidofbash`" ]; then echo "smth";fi
или
ps -ef|awk '{print $3}'|grep $pidofbash >/dev/null && echo "smth" || echo "other smth"
не уверен что эта штука будет работать в 100% случаев, хотя ситуаций когда оно не работет сходу не придумывается.
-
daa
- Сообщения: 23
- ОС: Fedora
Re: Активный процесс терминала
И ещё одна проблема: как определить работает ли дочерний процесс bash-a в background-е или в foreground-е?