возникла проблемка:
есть два процесса:посылальшик:
#include <stdio.h>
#include <signal.h>int main(int argc, char* argv[]) {
if(argc < 2) {
printf("no args\n");
exit(1);
}int clpid = atoi(argv[1]);
if(clpid > 0) {
printf("send request to (pid=%d)\n", clpid);
kill(clpid, SIGUSR1);
}
return(0);
}и принимальщик:
#include <stdio.h>
#include <signal.h>void act(int nsig) {
signal(SIGUSR1, act);
}int main(void) {
printf("client (pid=%d)\n",getpid());
signal(SIGUSR1, act);
while(1) {
printf("sleeping 100\n");
sleep(100);
}
}и вот та в чЁм проблемка, когда посылаю сигналчик, то sleep() "обнуляеться", тоесть спонтом всЁ его время прошло и он выходит из слипа...
можно как нить сделать чтоб сигналы не трогали слип??з.ы.: такая штука не подходит по другим соображениям:
вместо sleep(100) подставлять
cnt=10; while(cnt--) sleep(10);
Если верить man'ам то избежать этого нельзя.
man sleep
можно попробовать использовать pause() или select() или pselect()
это зависит от задачи которую пытаетесь решить.
>Если верить man'ам то избежать этого нельзя.
>man sleep
>можно попробовать использовать pause() или select() или pselect()
>это зависит от задачи которую пытаетесь решить.Ну не совсем так. sleep() возвращает количество "недоспанных" секунд. Можно сделать так:
seconds = 100;
while (seconds > 0)
seconds = sleep(seconds);
Ну вот, опять я не дочитал man :-)
та задача такая шо надо спать и не мешать.. )) время проца зря не гонять))
>возникла проблемка:
>есть два процесса:
>
>посылальшик:
>
>#include <stdio.h>
>#include <signal.h>
>
>int main(int argc, char* argv[]) {
>
> if(argc < 2) {
> printf("no args\n");
> exit(1);
> }
>
> int clpid = atoi(argv[1]);
> if(clpid > 0) {
> printf("send request to (pid=%d)\n", clpid);
> kill(clpid, SIGUSR1);
> }
> return(0);
>}
>
>и принимальщик:
>
>#include <stdio.h>
>#include <signal.h>
>
>void act(int nsig) {
> signal(SIGUSR1, act);
>}
>
>int main(void) {
> printf("client (pid=%d)\n",getpid());
> signal(SIGUSR1, act);
> while(1) {
> printf("sleeping 100\n");
> sleep(100);
> }
>}
>
>и вот та в чЁм проблемка, когда посылаю сигналчик, то sleep() "обнуляеться",
>тоесть спонтом всЁ его время прошло и он выходит из слипа...
>
>можно как нить сделать чтоб сигналы не трогали слип??использовать sigprocmask()
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>int
main(int argc, char *argv[])
{
sigset_t mask, old;
sigemptyset(&mask);
sigemptyset(&old);
sigfillset(&mask);
fprintf(stderr, "pid = %d\n", getpid());
sigprocmask(SIG_SETMASK, &mask, &old);
sleep(100);
sigprocmask(SIG_SETMASK, &old, NULL);
return 0;
}на соседней консоли пробуем kill -INT <pid> - все замечательно работает. Убить процесс можно kill -9 <pid>