백그라운드에서 실행되는 이 스크립트가 쉘을 "kill" 호출하고 종료해도 살아남을 수 있는 이유는 무엇입니까?

백그라운드에서 실행되는 이 스크립트가 쉘을 "kill" 호출하고 종료해도 살아남을 수 있는 이유는 무엇입니까?

스크립트가 있습니다

$ cat PDFX.sh 
#! /bin/bash
wine /home/t/pdfxcview/PDFXCview.exe

대화형 bash 셸에서 다음을 실행합니다.

$ ./PDFX.sh &
[1] 21740

그럼 죽여보려고 해

$ kill $(jobs -p)
[1]+  Terminated              ./PDFX.sh

"종료됨"이 표시되지만 프로그램은 PDFXCview.exe영향을 받지 않고 계속 실행 중이며 셸을 종료한 후에도 살아남을 수 있습니다.

$ exit
  • wine /home/t/pdfxcview/PDFXCview.exe스크립트를 교체하면 명령 및 쉘 종료가 유지 evince되지 않습니다 .kill

  • wine /home/t/pdfxcview/PDFXCview.exe &대화형 bash 셸에서 직접 실행 하면 kill명령 및 셸 종료가 유지되지 않습니다.

왜 차이가 나는지 알고 싶습니다.

나는 그것에 대해 특별한 것이 없다고 생각합니다 wine.

답변1

달리기

wine /home/t/pdfxcview/PDFXCview.exe

explorer.exe일반적으로 Windows 바이너리( 등) 에서 예상하는 일반적인 Windows 환경을 제공하기 위해 여러 프로세스가 시작됩니다 . Wine은 이러한 모든 프로세스를 시작 wineserver하고 모두 분리함으로써 이를 수행합니다. 따라서 해당 프로세스는 쉘 또는 심지어 쉘의 하위 프로세스가 아닙니다 wineserver. Wine에게 실행을 요청한 바이너리는 셸의 하위 프로세스일 수 있지만 상위 프로세스보다 오래 지속될 수 있다는 점도 거부되었습니다. 이러한 모든 프로세스를 시작한 셸을 종료해도 영향을 받지 않습니다.

Windows 프로그램을 종료하려면 해당 프로그램의 pid를 찾아 직접 종료해야 합니다. 당신은 죽일 수 있습니다모두와인 가공 과정에서는 wineserver -k.

를 실행하면 PDFX.sh &스크립트를 처리하기 위해 새 셸이 시작되고 해당 셸은 Wine을 실행하여 부팅됩니다 PDFXCview.exe. 을 실행하면 kill %1Wine 프로세스가 아닌 스크립트를 실행 중인 셸이 종료됩니다. Wine 프로세스는 계속 실행됩니다(pid 1로 변경됨).

을 실행하면 wine /home/t/pdfxcview/PDFXCview.exe &Wine 프로세스가 직접 시작됩니다. 나중에 실행하면 kill %1Wine 프로세스가 종료되어 Windows 프로그램이 중지됩니다. 실행 중인 다른 Windows 프로그램이 없으면 wineserver즉시 종료하십시오.

관련 정보