LINUX.ORG.RU

Одновременно отправить сигнал


0

0

Добрый день! Есть pid'ы нескольких процессов(процессы свои). Как им можно одновременно отправить по сигналу? Может быть их как-то можно объеденить в отдельную группу и сделать это через killpg? Вариант с kill(0, SIGxxx) не подходит, т.к. дочерних процессов всего 8, а послать сигнал нужно только 2м. ЗЫ я понимаю, что можно сделать просто 2мя вызовами kill, но преподу приперло, чтобы сигнал отправлялся обоим процессам одним вызовом.

Ответ на: комментарий от placement_new

setpgid(pid, pid) создаст группу процессов с идентификатором pid и этот pid будет лидером.

То есть, если у вас есть два ребенка которым надо одновременно отправить сигнал, то примерно так

setpgid(child1, child1); setpgid(child2, child1); killpg(child1, GIG_XXX);

вроде так

placement_new ★★
()

> но преподу приперло

Ах он шалунишка...

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

> вроде так

наверное да, это то, что хочет препод. но это
работает только если:

1. child2 и child1 - прямые потомки caller'а
2. в одной сессии с parent'ом (== caller)
3. не делали exec
4. не являются session leader
5. setpgid()'s вызываются именно в таком порядке

странного хочет ваш препод... или я чего не понял.

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

> но это работает только если: так-с, а как можно сделать, чтобы работало во всех случаях?

странного хочет ваш препод... или я чего не понял.

препод сам странный, на самом деле :-)

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

> а как можно сделать, чтобы работало во всех случаях?

да никак. man 2 kill все правильно говорит про групповую
посылку.

на всякий случай... условия 1-5 нужны чтобы setpgid()
сработал, сам-то kill(-pgid) работает всегда. ну, если
права есть послать сигнал, конечно.

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