Активный процесс терминала

Модератор: Модераторы разделов

Аватара пользователя
daa
Сообщения: 23
ОС: Fedora

Активный процесс терминала

Сообщение daa »

У меня следующая проблема:
Я использую эмулятор терминала vte, запускаю там процесс bash, Затем из bash запускаю новый процесс (например, vim или gcc).
Мне необходимо определить, что вывод и вывод на терминал заблокирован процессом vim-а (или gcc), т.е. нужно определить активный процесс. Как это можно сделать?
У меня есть PID bash-a, я могу получить устройства ввода и вывода через /proc, но что с этим делать? Может есть другой способ?

Заранее спасибо!
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Активный процесс терминала

Сообщение v04bvs »

Ну в голову пришло такое: находим всех детей баша, смотрим на их /proc/<pid>/fd/{0,1,2} и сравниваем с аналогичными симлинками баша. Но это как то расплывчато, вообще задача странная, честно говоря.
Спасибо сказали:
Аватара пользователя
daa
Сообщения: 23
ОС: Fedora

Re: Активный процесс терминала

Сообщение daa »

v04bvs писал(а):
08.04.2007 02:35
Ну в голову пришло такое: находим всех детей баша, смотрим на их /proc/<pid>/fd/{0,1,2} и сравниваем с аналогичными симлинками баша. Но это как то расплывчато, вообще задача странная, честно говоря.


Задача в следующем:
необходимо выполнить синхронизацию текущей директории bash с некоторой другой директорией, синхронизацию я выполняю через передачу команды cd в bash.
Так вот мне нужно определить, есть ли запущенная команда, в этом случае синхронизацию выполнять не стоит.
Что то похожее делает mc, только я с ним не разобрался.
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Активный процесс терминала

Сообщение v04bvs »

А зачем всё так сложно то? Я бы так примерно сделал:

Код: Выделить всё

#!/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: Активный процесс терминала

Сообщение diesel »

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: Активный процесс терминала

Сообщение daa »

И ещё одна проблема: как определить работает ли дочерний процесс bash-a в background-е или в foreground-е?
Спасибо сказали: