pthread_kill

OS/리눅스 & 유닉스 2012. 2. 16. 08:44
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#include <errno.h>

void *t_function(void *data)
{
        char a[100000];
        int num = *((int *)data);
        struct timeval tm;


        pthread_detach(pthread_self());

        printf("Thread Start\n");

        tm.tv_sec = 3;
        tm.tv_usec = 0;
        select(0, NULL, NULL, NULL, &tm);

        printf("Thread end\n");
}

int main()
{
        pthread_t p_thread;
        int thr_id;
        int status;
        int a = 100;

        printf("Before Thread\n"); 
        thr_id = pthread_create(&p_thread, NULL, t_function, (void *)&a);
        if (thr_id < 0)
        {
                perror("thread create error : ");
                exit(0);
        }

        for ( ; ; ) {
                struct timeval tm;
                tm.tv_sec = 0;
                tm.tv_usec = 500000;
                select(0, NULL, NULL, NULL, &tm);

                status = pthread_kill(p_thread, 0);
                if ( status == ESRCH ) {
                        printf("Thread ID[%d] not exist..\n", p_thread);
                        return 0;
                } else if ( status == EINVAL ) {
                        printf("Thread ID[%d] is yet alive\n", p_thread);
                }  else {
                        printf("Thread ID[%d] is yet alive\n", p_thread);
                }
        }

        return 0;
}

pthread_kill

pthread_kill 은 대상 thread에게 signal을 전달하는 기능 수행

SYNTAX
int pthread_kill(pthread_t thread, int sig);

RETURN VALUE
성공 : 0
실패 : ERROR
ERRORS
ESRCH : thread ID로 해당 thread를 찾을 수 없는 경우
EINVAL : 잘못된 signal number를 전달할 경우

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

Thread Functions for POSIX, Solaris and Windows NT  (0) 2012.03.14
sigwaitinfo  (0) 2012.02.21
grep 명령어  (0) 2012.02.13
grep, egrep, fgrep & 정규식  (0) 2012.02.13
shell 조건문  (0) 2012.02.11
: