minitalk

Toa·2022년 6월 30일
0

pid

운영체제에서 프로세스를 식별하기 위해 프로세스에 부여하는 id

process

실행 중인 프로그램으로 각 프로세스는 최소 1개의 스레드를 가진다.

thread

프로세스보다 작은 최소의 실행 흐름을 의미한다.


signal

void( *signal(int sig,void(*handler)(int))(int);
//return value : 성공하면 이전 핸들러의 포인터 반환, 실패 == -1 리턴

특정 이벤트가 발생하였을 때 프로세스에게 전달하는 신호를 의미한다.
프로세스 사이의 비동기적 통신 방법이다.(IPC)
프로세스에 전달된 시그널에 따라 등록된 핸들러를 호출하거나 프로세스 종료한다.(종료, 무시, 코어덤프, 중단, 재시작)
OS별로 지원하는 signal의 종류는

kill -l

명령어를 이용하여 확인할 수 있다.

각각의 상황에 맞는 signal이 미리 매크로 변수로 정의되어있어 이를 이용하여 적절한 signal handler를 이용하여 처리할 수 있다.

signal handler : 프로세스가 특정한 시그널을 수신하였을 때 수행하는 함수를 의미한다.

kill

#include <signal.h>
int kill(pid_t pid, int sig);
//return value : 0 == 성공, -1 == 실패

pid값을 가지는 프로세스에 signal을 전달한다.(pid값이 0이거나 음수인 경우는 특정 조건을 만족하는 프로세스에 signal을 전달함)

getpid

#include <unistd.h>
pid_t getpid(void);
//return value : 현재 프로세스의 process id(mac 기준 : 100~100000 범위)

pause

#include <unistd.h>
int pause(void);
//return value : 항상 -1 반환

signal이 도착할 때까지 작업을 중단시킨다.

sleep, usleep

#include <unistd.h>
unsigned int sleep(unsigned int seconds);
//return value : 지정된 시간이 되면 0, 그 전에 시그널을 받으면 남은 시간 반환
int usleep(useconds_t microseconds);
//return value : 성공하면 0, 실패시 -1 

exit

#include <stdlib.h>
void exit(int status);

status로는 EXIT_SUCCESS(0), EXIT_FAILURE(1)이 올 수 있다. 이 함수가 호출되면 atexit() 함수로 등록한 종료 핸들러를 모두 처리하고 표준 입출력 스트림을 닫는 작업을 수행한 후 커널의 정상 종료 작업을 수행한다.

0개의 댓글