유닉스에서는 스크립트/프로그램이 어떻게 실행되나요?

유닉스에서는 스크립트/프로그램이 어떻게 실행되나요?

Unix 스크립트의 실행 모드에 대해 질문이 있습니다.

예를 들어 다음 줄을 포함하는 스크립트는 다음과 같습니다.

command B
function C()
{
Myscript   // Myscript is a script 
command  D
}
command E

Myscript실행이 더 오래 걸리는 경우 (예: 5분) 다음 명령( command D)이 실행되거나 Myscript완료될 때까지 기다립니다.

답변1

특정 스크립트의 경우 둘 다 실행 Myscript되지 않습니다 command D. 함수를 정의했지만 C호출하지 않았습니다.

실행 순서는 다음과 같습니다.

  1. command B완료될 때까지 실행합니다.
  2. command E완료될 때까지 실행합니다.

호출하면 완료될 때까지 C실행된 Myscript다음 command D완료될 때까지 실행됩니다.

쉘 스크립트에서 호출하는 모든 것은 표시된 순서대로 실행되며 완료될 때까지 실행됩니다. 다른 작업과 병렬로 무언가를 실행해야 하는 경우 작업 제어를 사용해야 합니다( && 문자를 사용하여 작업을 백그라운드에 배치하는 방법 참조 ). 간단한 예:

A
B

완료될 때까지 실행한 A다음 B완료될 때까지 실행합니다. 스크립트가 완료되었습니다.

A &
B

백그라운드에서 실행한 A다음 포그라운드에서 B를 실행합니다. 쉘 스크립트는 B완료되면 종료됩니다. A아직 실행 중일 수도 있습니다.

A &
B &

A백그라운드에서 실행한 다음 ( A완료를 기다리지 않고) B백그라운드에서 실행합니다. 연극은 즉시 종료됩니다.

A &
B &
wait

A백그라운드에서 실행한 다음 ( A완료를 기다리지 않고) B백그라운드에서 실행합니다. 그런 다음 스크립트는 기다렸다가 A완료 B되면 종료됩니다.

답변2

한 가지 예외가 있는데 이에 대해서는 나중에 자세히 설명하겠습니다. 그러나 이러한 명령은 동일한 셸에서 실행됩니다( Myscript새 셸을 열 더라도 command D해당 명령이 실행되는 정확히 동일한 "상위" 셸을 갖게 됩니다). *NIX 쉘은 병렬화를 지원하지 않으므로 Myscript제어가 통과할 수 있도록 실행을 중지해야 합니다(종료 코드 사용) command D.

신호를 Myscript사용 하거나 후속 detach 를 작성하여 분리하는 경우는 예외입니다 . 이렇게 하면 스크립트가 백그라운드에 배치됩니다.NOHUP&Myscript

다음 코드 조각을 연구하세요.

openssl enc -e bf -in verybigfile -out outputfile -k thisismykey &; # this is a long operation because of the size of the very big file
echo 'hi!' # this will be written during the encrypting operation

이제 이것이 거의 자명해지기를 바랍니다.


Alexios의 답변에는 좋은 점이 포함되어 있습니다. 함수를 호출하지 않으므로 실행되지 않습니다.

관련 정보