kill -USR1 %1은(는) 무엇을 합니까?

kill -USR1 %1은(는) 무엇을 합니까?

아래에 두 개의 명령이 있는데 그 명령이 무엇을 하는지 모르겠습니다.

이 명령은 각각 무엇을 수행합니까?

kill -USR1 %1
kill $(pidof vlc)

답변1

kill -USR1 %1"사용자 정의 신호 #1"(일명 "SIGUSR1")을 현재 쉘 프로세스의 첫 번째 백그라운드 하위 프로세스로 보냅니다. 해당 백그라운드 프로세스가 USR1 신호에 대한 신호 처리기 기능을 설정한 경우 해당 기능이 실행됩니다. 대상 프로세스에 해당 신호에 대한 신호 처리기가 없으면 대상 프로세스가 종료됩니다.

kill $(pidof vlc)프로세스에 "종료"(SIGTERM) 신호를 보냅니다 vlc.

다른 답변에 대한 설명에 설명된 전체 시나리오 OP를 살펴보겠습니다.

사용자는 데스크탑에서 Unix 셸을 사용하여 새 창을 열고 다음과 같이 두 개의 프로그램을 시작합니다.
emacs &

그러면 백그라운드에서 Emacs 텍스트 편집기가 시작되어 첫 번째 백그라운드 작업(%1)이 됩니다.

vlc ti2_intro.mp4

그러면 비디오를 재생하기 위해 전경에서 VLC 비디오 플레이어가 시작됩니다 ti2_intro.mp4.

Videoti2_intro.mp4가 재생되는 동안 사용자는 셸 창에서 Ctrl-z를 누릅니다.

이로 인해 VLC인 포그라운드 하위 프로세스가 중단됩니다. 이는 VLC가 일시적으로 중단되었지만 종료되지 않았음을 의미합니다. 정지된 상태입니다. 이제 프로세스입니다 %2.

이제 [그녀는] 쉘 명령을 실행합니다 jobs.

이를 통해 그녀는 이 쉘 프로세스에 어떤 하위 프로세스가 연결되어 있는지 확인할 수 있습니다. 아마도 , 및 emacs로 표시될 것 입니다.%1vlc%2

다음은:
bg %2

이렇게 하면 백그라운드에서 VLC가 다시 시작되어 셸을 묶지 않고도 비디오를 계속 재생할 수 있으므로 비디오가 재생되는 동안 더 많은 셸 명령을 실행할 수 있습니다.

kill -USR1 %1

그러면 "사용자 정의 신호 1"이 로 전송됩니다 emacs. Emacs를 사용하면 사용자가 자신의 신호 처리기를 정의할 수 있으므로 Emacs 설정에 대한 세부 정보를 알지 못하면 이 신호가 무엇을 하는지 알기가 어렵습니다. Emacs "elisp" Lisp 프로그래밍 환경에서 디버거를 트리거하는 데 자주 사용됩니다.

잠시 후 그녀는 쉘 명령을 내리고 [OP가 여기서 명령을 빠뜨린 것 같은데요?] Ctrl-c를 누릅니다.

OP가 여기서 빠뜨린 명령이 무엇인지는 확실하지 않지만, 즉시 종료되지 않는 명령을 실행한 다음 Ctrl-c를 사용하여 종료한 것으로 추측됩니다.

그 직후 그녀는 동일한 셸 창에서 다음 명령을 내립니다.
kill $(pidof vlc)

그러면 VLC 프로세스가 종료(종료)됩니다.

답변2

kill은 나열된 프로세스를 종료합니다(또는 프로세스에 자체 종료를 요청하는 신호를 보냅니다).

첫 번째 경우에는 자체 종료를 요청하기 위해 진행 상태로 전송되는 신호가 전송됩니다(이는 코딩된 경우에만 수행됩니다. 그렇게 코딩된 프로그램은 자체적으로 정리되고 종료됩니다). %1은(는) "job1"을 의미합니다. Job1은 백그라운드에서 실행되고 현재 세션과 연결된 프로세스입니다.% 1을(를) 죽이는 것이 무슨 뜻인가요?)

두 번째 경우 명령은 vlc의 프로세스 ID를 찾아 종료하는 것입니다.

관련 정보