kill() 에 넘겨주는 signal에 대해 간단한 질문 ..
글쓴이: shiefra / 작성시간: 일, 2004/10/24 - 7:17오후
간단한 shell을 짜보고 있는데요.
$kill -SIGNAL PID
를 위해 kill() 시스템콜을 사용하려다 보니까
인수로 넘겨줄 signal파라메터가 int타입이더군요.
살짝 검색해봤더니
#include <sys/types.h>
#include <signal.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
int pid;
int sig_num;
// 아규먼트로 pid 번호와
// 전송할 signal 번호를 받아들여서
// 이를 해당 pid 로 보낸다.
pid = atoi(argv[1]);
sig_num = atoi(argv[2]);
kill(pid, sig_num);
}이런 예제가 보이던데.. 이건 유저가
$kill PID 9
이런 식으로 명령을 내려야만 유효할거 같은데, 맞나요?
그리고 signal이 string으로 들어오면
kill()함수에 어떻게 넘겨주나요?
써놓고 보니 한심하네요 이런것도 모르고;
Forums:


[code:1]voiddo_kill(int argc, co
void do_kill(int argc, const char ** argv) { const char * cp; int sig; int pid; sig = SIGTERM; if (argv[1][0] == '-') { cp = &argv[1][1]; if (strcmp(cp, "HUP") == 0) sig = SIGHUP; else if (strcmp(cp, "INT") == 0) sig = SIGINT; else if (strcmp(cp, "QUIT") == 0) sig = SIGQUIT; else if (strcmp(cp, "KILL") == 0) sig = SIGKILL; else if (strcmp(cp, "STOP") == 0) sig = SIGSTOP; else if (strcmp(cp, "CONT") == 0) sig = SIGCONT; else if (strcmp(cp, "USR1") == 0) sig = SIGUSR1; else if (strcmp(cp, "USR2") == 0) sig = SIGUSR2; else if (strcmp(cp, "TERM") == 0) sig = SIGTERM; else { sig = 0; while (isDecimal(*cp)) sig = sig * 10 + *cp++ - '0'; if (*cp) { fprintf(stderr, "Unknown signal\n"); return; } } argc--; argv++; } while (argc-- > 1) { cp = *(++argv); pid = 0; while (isDecimal(*cp)) pid = pid * 10 + *cp++ - '0'; if (*cp) { fprintf(stderr, "Non-numeric pid\n"); return; } if (kill(pid, sig) < 0) perror(*argv); } }sash-3.7 의 do_kill 함수입니다.
도움이 되셨는지요..
시그널에 대한 정의는 (32개였던가요..가물가물..) /usr/inclu
시그널에 대한 정의는 (32개였던가요..가물가물..) /usr/include/bits/signum.h 정도에 있습니다. 위치가 정확한지는 잘 모르겠지만...
사실 실제로 사용하는 시그널은 위에 있는 do_kill()함수내에 있는 것들 정도 뿐이겠지요.
댓글 달기