LINUX.ORG.RU

Сообщения J_e_k

 

sigsuspend не работает :(

Почему может не работать такой фрагмент:

sigset_t mask;

sigprocmask(SIG_SETMASK, NULL, &mask); /* Get current signal mask */
sigdelset(&mask, sig_restart);         /* Unblock the restart signal */
sigsuspend(&mask);                     /* Wait for signal */

Другой тред посылает kill-ом сигнал seg_restart (=32) данному, но
sigsuspend не разблокируется, как висел, так и висит.

libpthread 0.7, glibc 2.2.93.

У меня уже совсем лыжи не едут :(

J_e_k
()

Страсти по execv

Такая случилась историия: есть у меня процесс, видимый командой ps:

 4980 pts/6    00:04:31 prog

Эта программа должна писать в файл "log" в бесконечном цикле "Hello!",
но процесс приостановлен, ничего не пишет.

Я компилирую и запускаю следующее:

#include <unistd.h>

int main() {
  if(fork()==0) {
    char * argv[] = {"prog",NULL};
    execv(argv[0], argv);
  }
  return 0;
}

Это отрабатывает очень быстро, а я вижу на диске файл "log" с
несколькими тысячами слов "Hello!".

На диске в текущей директории и в PATH нет исполняемого файла с
именем "prog".

Кто бы мне объяснил такое поведение? Корректно ли оно?


J_e_k
()

Как преостановить поток (pthreads)?

В частности, поток должен приостановить (suspend) сам себя. Почему-то такой вызов: pthread_kill(pthread_self(), SIGSTOP) не работает. Где я не прав, и как нужно делать правильно?

J_e_k
()

Что будет, если вызвать exit() или _exit() в дочернем треде?

Имеется ввиду pthreads.

Я нахожусь в каком-то треде - дочернем, там вызываю exit(), или _exit(), и моя прога подвисает, ожидая чего-то (вопрос номер один - чего она может ожидать?) Если вместо exit()/_exit() вызвать abort(), программа послушно абортается.

Если перед exit()/_exit() попытаться вызвать pthread_kill_other_threads(), результат тот же, до exit()/_exit() вообще не добираемся, ждем-с.

Кто бы подсказал, если кто имел дело с таким поведение, в чем тут может быть дело, и как можно бороться, а?

Заранее премного благодарен.

J_e_k
()

RSS подписка на новые темы