Имею такое задание:
Написать программу trykill которая на практике определяет множество сигналов,
- которыми могут обмениваться 2 процесса одного пользователя;
- которые могут быть посланы процессом пользователя A процессу пользователя B, при условии, что пользователи A и B являются членами одной группы;
- которые могут быть посланы процессом пользователя A процессу пользователя root.
Честно, не совсем представляю себе, как это решать. Нашел в интернете такую программу:
void sig_handler(int sig)
{
printf("cathed signal %d\n",sig);
exit(0);
}
int main(int argc,char **argv[])
{
int i,errno,err;
pid_t pid;
// пока он спит, тестим его на восприимчивость сигналов
for(i = 1;i < NSIG;i++)
{
if(i!=SIGSTOP&&i!= SIGKILL)
{
errno=0;
err=signal(i, sig_handler);
printf("sig %d, status %d, errno %d\n",i,err,errno);
}
}
if((pid=fork())==0)
{
execl("./launch","./launch",0);
sleep(30);
}
}В случае, когда надо послать сигнал другому пользователю:
void sig_handler(int sig)
{
exit(0);
}
int main(int argc,char **argv[])
{
int i,errno,err;
pid_t pid;
for(i = 1;i <NSIG;i++)
{
if(i!=SIGSTOP&&i!= SIGKILL)
{
err=kill(ЗДЕСЬ PID ПРОЦЕССА ДРУГОГО ПОЛЬЗОВАТЕЛЯ, i);
printf("sig %d, status %d\n",i,err);
}
}
if((pid=fork())==0)
{
execl("./launch","./launch",0);
sleep(30);
}
}Как я понял, на печать выводятся сигналы, на которые отреагеровала функция sig_handler в виде цифр(по сути числа от 1 до 64). Мне же нужно, чтобы это были названия сигналов(типа SIGSTOP, SIGKILL). Первый вопрос - как сделать, чтобы выводились они.
Ну, это работает для процессов одного пользователя, а второй вопрос заключается в том, чтобы сделать это для двух.
-

