LINUX.ORG.RU

Я бы делал так же.

vga ★★
()
~$ timeout -9 5 'netstat'
Активные соединения с интернетом (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State      
tcp        0      0 localhost:50621              ey-in-f100.1e100.ne:www ESTABLISHED
tcp        0      0 localhost:54310              ey-in-f101.1e100.ne:www ESTABLISHED
Timeout: aborting command ``netstat'' with signal 9
Killed
$ timeout --help
usage: timeout [-signal] time command...
edigaryev ★★★★★
()

Хотя так оно будет выполнятся всегда 60 секунд. А если надо выходить, когда программа завершилась раньше - надо что-то еще мудрить.

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

Русский неродной язык. Путаюсь иногда :)

Cosmicman ★★
() автор топика

Сравни 2 команды
perl -e 'alarm(2); system «ls; sleep 60» '
и
perl -e 'alarm(2); system «ls» '
короче, перловое alarm то, что надо.

Bers666 ★★★★★
()
Ответ на: комментарий от Bers666
edigaryev@brick ~ $ perl -e 'alarm(2); system "netstat"'
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 192.168.0.3:35409       ey-in-f100.1e100.n:http ESTABLISHED
tcp        0      0 192.168.0.3:52794       gravatar.com:http       ESTABLISHED
tcp        0      0 192.168.0.3:52795       gravatar.com:http       ESTABLISHED
Сигнал таймера <- netstat почему-то не обрабатывает SIGALARM
edigaryev@brick ~ $ tcp        0      0 192.168.0.3:55662       mg-in-f125.:xmpp-client ESTABLISHED
tcp        0      0 192.168.0.3:48016       kubrick.freenode.n:ircd ESTABLISHED
tcp        0      0 192.168.0.3:37578       ey-in-f99.1e100.ne:http ESTABLISHED
tcp        0      0 192.168.0.3:52846       ey-in-f104.1e100.n:http ESTABLISHED
tcp        0      0 192.168.0.3:47115       xmpp.yandex:xmpp-client ESTABLISHED
tcp        0      0 192.168.0.3:55691       77.67.101.101:ircd      ESTABLISHED
tcp        0      0 192.168.0.3:45404       192.168.0.1:22440       ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    1056     @/org/kernel/udev/udevd
unix  2      [ ]         DGRAM                    6228     
p
..дальше netstat отрабатывает до конца
edigaryev ★★★★★
()
Ответ на: комментарий от edigaryev

SIGALARM прерывает system() в скрипте, но не прерывает выполнение комманды. В контексте перл-скриптов это кстати тоже Ъ-решение ограничивать время исполнения.

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

Работает, подтверждаю.

Впрочем, неудивительно, exec() ведь заменяет процесс перла на netstat и уже сам netstat ловит аларм. А в случае с system() форкается шелл ,потом нетстат, а и аларм получает сам перл.

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

да, но в случае с system() перл-процесс получает TERM , но т.к. имеет ребенка, то посылает и ему тоже TERM, в рез-те оба должны умереть...

Bers666 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.