All streams
Search
Write a publication
Pull to refresh
9
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() один вызов сигнала для обоих функций?
Спасибо.
В моём понимании, ядро — это просто большая программа и ничего более.
Собственно про это и хотел спросить. Мне однажды задали вопрос — «что такое ядро»? — и я не смог дать какого-либо ответа, кроме похожего на Ваш. Углубление в режимы (привилегированный и непривилегированный) приводит к ещё большему размыванию понятия. )))
Просто хотел услышать Ваше мнение и мнение других людей в виде тезиса.

Во-первых, использование signal(2) не рекомендуется, даже ман-страница об этом говорит:
Приму к сведению.

Во-вторых, мне кажется несколько избыточным устанавливать обработчик сигналов КАЖДЫЙ раз, это достаточно сделать один раз при инициализации.
Достаточно будет поместить его в майн()?
Здравствуйте. Спасибо за статью.
Обьясните пожалуйста, Вы или кто-то другой, более развернуто, что такое ядро? То есть обозначьте его рамки что-ли. Его везде описывают как некую абстракцию, а хочется чуть больше конкретики, и простым языком.

И ещё один вопрос:
void child_sm_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) 
     { 
       char json_str[LENJSONSEND] = {0,}; 
       char str[BREADSIZE] = {0,}; 
       
       if(cod == 0) // strat
        {
           ...

Функция SendMessage вызывается время от времени, выполняет свою работу и завершается.

Скажите, правильно ли я убиваю зомби?
signal(SIGCHLD, child_sm_kill); ⇨ void child_sm_kill() { wait(NULL); }

Заранее спасибо.

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity