시그널 이름 | 의미 | 기본처리 |
---|---|---|
SIGABRT | abort()에서 보냄. 의도적인 중단을 의미 | 코어 덤프 |
SIGALRM | alarm()에서 보냄. 정해진 시간이 됐다는 의미 | 종료 |
SIGBUS | 하드웨어 버스 에러 | 코어 덤프 |
SIGCHLD | 자식 프로세스 종료 | 무시 |
SIGSTOP | 프로세스 중지 | 정지 |
SIGCONT | 중지된 프로세스 재시작 | 시작 |
SIGHUP | 프로세스의 제어 터미널이 닫힘 | 종료 |
SIGILL | 프로세스가 부적절한 명령을 실행 | 코어 덤프 |
SIGINT | 사용자가 인터럽트를 생성 | 종료 |
SIGQUIT | 사용자가 종료 문자 생성 | 코어 덤프 |
SIGTSTP | 사용자가 일시 중지 문자 생성 | 정지 |
SIGIO | 비동기 입출력 | 종료 |
SIGPIPE | 프로세스가 잘못된 파이프에 쓰기 작업을 시도 | 종료 |
SIGSEGV | 메모리 세그먼트 접근 위반하는 프로그램 오류 | 코어 덤프 |
SIGFPE | 산술 연산 예외가 발생하는 프로그램 오류 | 코어 덤프 |
SIGKILL | 프로세스 종료 명령 | 종료 |
SIGTERM | 프로세스 종료 명령(조건에 따른 처리 가능) | 종료 |
SIGUSR1 | 사용자 정의 시그널1 | 종료 |
SIGUSR2 | 사용자 정의 시그널2 | 종료 |
ps
: 프로세스 목록 조회ps -f
: 프로세스 목록 조회 (아래의 정보 추가)ps -e
, ps -ef
: 현재 터미널에서 실행한 프로세스 이외의 시스템의 전체 프로세스 목록 조회ps -ef --forest
: 트리 형태로 프로세스 계층 구조 조회echo $$
: 현재 실행중인 프로세스 조회다음과 같이 스크립트를 작성하여 실행해보고 PID의 변화를 알아보자.
vim process.sh
#!/bin/bash
while [ 1 ];do
echo "hello, PID $$"
sleep 3
done
먼저 현재 프로세스를 먼저 조회하면 2018 을 조회한다.
이제 방금 만든 스크립트를 실행해보자. 실행 권한 주는 거 잊지말고!(chmod 0755 process.sh
)
./process.sh
로 실행하면 다음과 같이 3초씩 쉬면서 프린트를 한다.
실행중으로 두고 새로 터미널을 열어 ps -ef --forest
를 조회해보자.
2018을 부모프로세스로 가진 2271 프로세스가 있고 이 프로세스를 부모프로세스로 가지는 2287 프로세스가 있는 것을 확인할 수 있다.
2287 프로세스는 sleep을 하는 프로세스로 3초가 지나면 사라지고 다시 sleep을 할 때 새로운 PID를 가진 프로세스가 생성이 된다.
echo $?
: 직전 커맨드의 실행 결과를 조회한다.
kill
: 시그널을 보내는 커맨드-l
: 시그널 종류 조회kill -9 2487
echo $?
결과: 137kill -TERM 2540
echo $?
결과: 130./process.sh &
: 백그라운드로 실행jobs
: 백그라운드 프로세스 조회-l
: PID도 같이 조회fg
: 다시 포어그라운드로 실행%2
: jobs
로 조회한 2번 프로세스를 포어그라운드로 실행Ctrl + Z
: 프로세스 멈춤bg
: 다시 포어그라운드로 실행