pthread_sigmask(3) - wariua/manpages-ko GitHub Wiki

NAME

pthread_sigmask - ๋ธ”๋ก ๋œ ์‹œ๊ทธ๋„ ๋งˆ์Šคํฌ ์กฐ์‚ฌํ•˜๊ณ  ๋ฐ”๊พธ๊ธฐ

SYNOPSIS

#include <signal.h>

int pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset);

-pthread๋กœ ์ปดํŒŒ์ผ ๋ฐ ๋งํฌ.

glibc ๊ธฐ๋Šฅ ํ™•์ธ ๋งคํฌ๋กœ ์š”๊ฑด (feature_test_macros(7) ์ฐธ๊ณ ):

pthread_sigmask():
_POSIX_C_SOURCE >= 199506L || _XOPEN_SOURCE >= 500

DESCRIPTION

pthread_sigmask() ํ•จ์ˆ˜๋Š” sigprocmask(2)์™€ ๋น„์Šทํ•˜๋˜ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋žจ์—์„œ์˜ ์‚ฌ์šฉ์„ POSIX.1์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ๋ช…์„ธํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ๋‹ค๋ฅธ ์ฐจ์ด์ ๋“ค์„ ์ด ํŽ˜์ด์ง€์—์„œ ์–ธ๊ธ‰ํ•œ๋‹ค.

์ด ํ•จ์ˆ˜์˜ ์ธ์ž์™€ ๋™์ž‘์— ๋Œ€ํ•œ ์„ค๋ช…์€ sigprocmask(2)๋ฅผ ๋ณด๋ผ.

RETURN VALUE

์„ฑ๊ณต ์‹œ pthread_sigmask()๋Š” 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์˜ค๋ฅ˜ ์‹œ ์˜ค๋ฅ˜ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

ERRORS

sigprocmask(2) ์ฐธ๊ณ .

ATTRIBUTES

์ด ์ ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด๋“ค์— ๋Œ€ํ•œ ์„ค๋ช…์€ attributes(7)๋ฅผ ๋ณด๋ผ.

์ธํ„ฐํŽ˜์ด์Šค ์†์„ฑ ๊ฐ’
pthread_sigmask() ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ MT-Safe

CONFORMING TO

POSIX.1-2001, POSIX.1-2008.

NOTES

์ƒˆ ์Šค๋ ˆ๋“œ๋Š” ์ƒ์„ฑ์ž์˜ ์‹œ๊ทธ๋„ ๋งˆ์Šคํฌ ์‚ฌ๋ณธ์„ ๋ฌผ๋ ค๋ฐ›๋Š”๋‹ค.

glibc์˜ pthread_sigmask() ํ•จ์ˆ˜์—์„œ๋Š” NPTL ์Šค๋ ˆ๋”ฉ ๊ตฌํ˜„ ๋‚ด๋ถ€์—์„œ ์“ฐ๋Š” ๋‘ ๊ฐ€์ง€ ์‹ค์‹œ๊ฐ„ ์‹œ๊ทธ๋„์„ ๋ง‰์œผ๋ ค๋Š” ์‹œ๋„๋ฅผ ์กฐ์šฉํžˆ ๋ฌด์‹œํ•œ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ nptl(7)์„ ๋ณด๋ผ.

EXAMPLE

์•„๋ž˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์ฃผ ์Šค๋ ˆ๋“œ์—์„œ ๋ช‡ ๊ฐ€์ง€ ์‹œ๊ทธ๋„๋“ค์„ ๋ง‰๊ณ  ๋‚˜์„œ sigwait(3)์„ ํ†ตํ•ด ๊ทธ ์‹œ๊ทธ๋„๋“ค์„ ๊ฐ€์ ธ์˜ค๋Š” ์ „์šฉ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ ๋‹ค. ๋‹ค์Œ ์…ธ ์„ธ์…˜์ด ์‚ฌ์šฉ ๋ฐฉ์‹์„ ๋ณด์—ฌ ์ค€๋‹ค.

$ ./a.out &
[1] 5423
$ kill -QUIT %1
Signal handling thread got signal 3
$ kill -USR1 %1
Signal handling thread got signal 10
$ kill -TERM %1
[1]+  Terminated              ./a.out

ํ”„๋กœ๊ทธ๋žจ ์†Œ์Šค

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>

/* ๊ฐ„๋‹จํ•œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜ */

#define handle_error_en(en, msg) \
        do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)

static void *
sig_thread(void *arg)
{
    sigset_t *set = arg;
    int s, sig;

    for (;;) {
        s = sigwait(set, &sig);
        if (s != 0)
            handle_error_en(s, "sigwait");
        printf("Signal handling thread got signal %d\n", sig);
    }
}

int
main(int argc, char *argv[])
{
    pthread_t thread;
    sigset_t set;
    int s;

    /* SIGQUIT๊ณผ SIGUSR1 ๋ง‰๊ธฐ. main()์ด ๋งŒ๋“œ๋Š” ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋“ค์€
       ์ด ์‹œ๊ทธ๋„ ๋งˆ์Šคํฌ ์‚ฌ๋ณธ์„ ๋ฌผ๋ ค๋ฐ›๊ฒŒ ๋œ๋‹ค. */

    sigemptyset(&set);
    sigaddset(&set, SIGQUIT);
    sigaddset(&set, SIGUSR1);
    s = pthread_sigmask(SIG_BLOCK, &set, NULL);
    if (s != 0)
        handle_error_en(s, "pthread_sigmask");

    s = pthread_create(&thread, NULL, &sig_thread, (void *) &set);
    if (s != 0)
        handle_error_en(s, "pthread_create");

    /* ์ฃผ ์Šค๋ ˆ๋“œ์—์„œ ๊ณ„์†ํ•ด์„œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋“ค์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๋‹ค๋ฅธ
       ์ž‘์—… ์ˆ˜ํ–‰ */

    pause();            /* ํ”„๋กœ๊ทธ๋žจ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ค‘์ง€ */
}

SEE ALSO

sigaction(2), sigpending(2), sigprocmask(2), pthread_create(3), pthread_kill(3), sigsetops(3), pthreads(7), signal(7)


2019-03-06

โš ๏ธ **GitHub.com Fallback** โš ๏ธ