Pull to refresh
8
0
Дим@im_stD

Всем удачи

Send message
Без протокола пишите.
Если вы находитесь в России, то все пройдет хорошо только в том случае, если у вас включен VPN.


СПб, Интерзет (дом.ру) — С недавнего времени, api.telegram.org откравается без VPN.

В связи с этим, недавно вернул своих ботов обратно на веб-хуки.
Наверно без Александра Новикова статья будет не полной…



Чудо ОС! Установка в виртуалбокс заняла 10 секунд, загрузка 5 секунд.
Да, Вы правы, гептаподы. Беру свое предложение обратно.
Автору для КДПВ…


Недавно пересматривал «Прибытие», поэтому слово «гексапод» сразу ассоциировалось...
Спасибо, я очень надеялся это услышать. Офигенно круто.
Обращаюсь и к Вам, и к khim. Правильно ли я понимаю работу signal()?
Функция signal() вызванная единожды из main() висит где-то в памяти на протяжении всего времени жизни приложения и ожидает сигналов. То есть функция signal() это что-то вроде какого-то отдельного процесса? Или это что-то похожее на обработчик прерываний в микроконтроллерах?

И с параметрами поясните пожалуйста. Первый параметр — это ожидаемый сигнал, второй параметр — это то, что нужно сделать при поступлении сигнала.
То есть, вот это — signal(SIGCHLD, SIG_IGN) нужно понимать как — signal(при получении сигнала от ребёнка, игнорировать сигнал), что значит игнорировать? Типа пошёл ты к чёрту, плевать я на тебя хотел. ))
Да, действительно этого достаточно, и даже в википедии про это написано.) Спасибо.
Спасибо. Возьму на вооружение.
Что бы Вы ответили?
У меня есть ощущение, что вы всей картины не видите.

Вы правы.

это значит, что вы хотите, чтобы программа работала параллельно со своим ребёнком.

Да, нужно чтоб программа работала независимо от «детей». Функция маин() крутится в цикле и время от времени вызывает функции с форками.

А тогда как вы обеспечите, что ребёнок умрёт и будет «подметён» обрабочиком SIGCHLD, который вы установили до вызова fork(2), до того, как другая функция с другим обработчиком вызовется?

Мыслил исходя из того, что каждый форк делает копию всей программы.

Сделал так:

void ckill_all_childl() { wait(NULL); } 

void SendMessage(char *chat_id, char *send_text, int cod) 
{
    pid_t smpid;  
    smpid = fork();
    if(smpid == 0) 
     { 
       ...

void update_instag(char *chat_id) 
{ 
  pid_t geekfork;
  geekfork = fork();
  if(geekfork == 0) 
   {
      ...

int main() 
{  
  signal(SIGCHLD, kill_all_child);   
   ...
Спасибо.
Мне нужно только убийство зомби. Если я оставлю один вызов сигнала в main(), и один обработчик, то этого будет достаточно для убийства зомби обоих функций?

До этого момента я думал, что понимаю работу signal и wait, оказывается нет.
Спасибо.
Если обработчик будет один, будет ли он правильно работать (подчищать зомби) для обоих функций, или нужно обязательно писать два разных обработчика?
Как бы Вы сделали? Применительно к выше указанному коду.
Я немного недопонимаю. Если у меня несколько разных функций вызывающих форки…

void child_sm_kill() { wait(NULL); } 
void child_ui_kill() { wait(NULL); } 

void SendMessage(char *chat_id, char *send_text, int cod) 
{
    pid_t smpid;  
    signal(SIGCHLD, child_sm_kill);  
    smpid = fork();
    if(smpid == 0) 
     { 
       ...

void update_instag(char *chat_id) 
{ 
  pid_t geekfork;
  signal(SIGCHLD, child_ui_kill);
  geekfork = fork();
  if(geekfork == 0) 
   {
      ...

int main() 
{   
   ...


… то как быть? Сделать в main() один вызов сигнала для обоих функций?

Information

Rating
5,653-rd
Location
Россия
Date of birth
Registered
Activity