powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / shell обработка сигналов
9 сообщений из 9, страница 1 из 1
shell обработка сигналов
    #33145388
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!

Можно ли, обрабатывая сигнал в shell trap-ом
узнать id процесса, пославшего сигнал (типа как siginfo_t.si_pid при обработке sigaction) ???
...
Рейтинг: 0 / 0
shell обработка сигналов
    #33145463
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--Привет!

Можно ли, обрабатывая сигнал в shell trap-ом
узнать id процесса, пославшего сигнал (типа как siginfo_t.si_pid при обработке sigaction) ???
Да вроде нет, я по крайней мере в мане про то ничего не нашел... Или ты это так спросил - для поддержания разговора?
...
Рейтинг: 0 / 0
shell обработка сигналов
    #33145554
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да нет, тут коллеге понадобилось
и что-то интересно стало - возможно ли такое в шелле...
В мане по трапу конечно ничего нет я думал может еще как-то.
Например, какая-нить переменная "процесс, от которого получен последний сигнал" или что-нить такое...

Вышли из ситуации пока так: кандидаты на подобное место - runnable процессы. Что конечно очень грубо и цинично.
...
Рейтинг: 0 / 0
shell обработка сигналов
    #33145913
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--
Вышли из ситуации пока так: кандидаты на подобное место - runnable процессы. Что конечно очень грубо и цинично.
Поясни плиз, если не трудно. Типа предполагается, что процесс у кого STATE есть R тот и послал сигнал что ли? Или где?
...
Рейтинг: 0 / 0
shell обработка сигналов
    #33145995
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага, это конечно наивняк, но тут мы предполагаем, что runnable процесс как раз и мог послать сигнал. Мне это тоже не очень нравится.
А чтобы было понятно, для чего эта шняга: аффтор хочет при получении сигнала чтобы скрипт отбросил мессагу на тот терминал, с которого поступил сигнал (т.е. реально PID нужен ему лишь для определения терминала).
...
Рейтинг: 0 / 0
shell обработка сигналов
    #33146053
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--ага, это конечно наивняк, но тут мы предполагаем, что runnable процесс как раз и мог послать сигнал. Мне это тоже не очень нравится.
А чтобы было понятно, для чего эта шняга: аффтор хочет при получении сигнала чтобы скрипт отбросил мессагу на тот терминал, с которого поступил сигнал (т.е. реально PID нужен ему лишь для определения терминала).

Аффтор жжет? (с)


Мне кажется если сигнал скрипту посылать kill-ом или killall-ом, то указанные команды завершатся раньше чем скрипт обработает вывод от ps... Или оно уже проверено и работает?
...
Рейтинг: 0 / 0
shell обработка сигналов
    #33146065
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
он грит что работает.
Проверю-ка я тоже, потому что насчет завершения согласен.
Это ж ps породить - достаточно долго.
Абыдна что в трапе такого не сделали и главное - тут уж никак shell не расширить, свой обработчик в него не внедрить (по крайней мере я не умею :-))
...
Рейтинг: 0 / 0
shell обработка сигналов
    #33146078
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--
он грит что работает.


Чего то мне интересно стало. Набросал щас небольшую прогу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
// sigtst.c
#include <signal.h>
#include <stdio.h>

#define SET0(str) str[sizeof(str)- 1 ]= 0 

void my_action(int sig, siginfo_t *si, void * p) {
 char path[ 1024 ];
 char lnk[ 1024 ];

 lnk[ 0 ]= 0 ; SET0(lnk); SET0(path);
 snprintf(path,sizeof(path)- 1 ,"/proc/%u/fd/0",si->si_pid);
 readlink(path,lnk,sizeof(lnk)- 1 );

 printf("Got signal %i from pid %i, term=%s (%s)\n",
  si->si_signo,si->si_pid,lnk, path);

 if (lnk[ 0 ]) {
  snprintf(path,sizeof(path)- 1 ,"echo Hello  > %s",lnk);
  system(path);
 } else perror("readlink");

 return;
}

main() {
 struct sigaction act;

 act.sa_flags=SA_SIGINFO;
 act.sa_sigaction=my_action;
 sigemptyset(&act.sa_mask);
 sigaction(SIGTERM,&act,NULL);

 while( 1 ) {sleep( 1 );}
}


Откомпилил, запутил. На другом терминале набрал killall sigtst... Вобщем почти всегда не успевает даже в этом случае (C + прямое сканирование /proc). Где то один раз из ста определяет терминал с которого послан сигнал. Разве что запустить killall -w sigtst - но это нечестно
...
Рейтинг: 0 / 0
shell обработка сигналов
    #33146090
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, лажа - собственно это и ожидалось.
Стало быть, тот скрипт пока что - профанация :-)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / shell обработка сигналов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]