HP-UX

스크립트 문의 백그라운드 실행 sleep

 
김성호_1
비정기 조언자

스크립트 문의 백그라운드 실행 sleep

스크립트 sleep 관련.....질문입니다 ~



파일명 test.sh



#!/bin/ksh

DATE=1

while((DATE < 10))

do

date +%T";"date +%H:%M:%S >> date.txt

sleep 300

done



한번 실행하면 300초 후에 다시 작동될텐데요...



테스트 한다고 전에 만들어서 실행시키고 중지 시켰었던거같은데

ps -ef |grep .sh 로 보면

/bin/ksh test.sh

/bin/ksh test.sh

/bin/ksh test.sh

sh -c test.sh

sh -c test.sh

sh -c test.sh



ps -ef |grep sleep 로 보면

sleep 300

sleep 300

sleep 300

sleep 300

이런넘들이 무척 많이 떠있습니다...



test.sh 파일을 삭제, 변경을 하여도 여전히 실행되어 date.txt 파일의 용량은 계속 쌓이고 있습니다.



1. test.sh 파일이 없는데 어떻게 돌아가는지..?

2. 테스트하고 중지 한거 같은데 계속 돌아가는건 중지를 제데로 안시킨거 이외의 다른 이유가 있는지...

3. kill -9 pid 로 죽이면 sleep 떠있는 프로세스들도 없어지는지 문의드립니다.

HP-UX B.11.11 U 9000/800 입니다



감사합니다.
3 응답 3
김영민_7
임시 조언자

스크립트 문의 백그라운드 실행 sleep

안녕하세요.

우선 제 짧은 생각으로는 위에 스크립트에서 약간의 오류가 있어 보입니다.



#!/bin/ksh

DATE=1

while((DATE < 10))

do

date +%T";"date +%H:%M:%S >> date.txt

sleep 300

done



에서 while 문에서 DATE 값을 증가 시켜주는 라인이 빠져 있는 듯 싶습니다.

그렇기 때문에 계속해서 무한 루프를 돌게 되는것 같구요.

무한루프에서 벗어나게 하시려면

sleep 다음에

(( DATE=DATE+1 ))

이라고 넣어주시면 될것 같습니다.





파일이 지워지더라도 메모리에 올라가 있게되면 계속 돌게 되고 값을

date.txt 라는 파일에 쌓게 되겠지요.



그리고 kill -9 로 sleep 를 죽이는것은 가능한데

죽인다 하더라도 무한루프에 빠지면 다시 생겨날 수 있으므로

sleep 프로세스의 부모 프로세스를 같이 죽이시는게 좋을것 같습니다.



이상 짧은 생각이었는데요...

도움이 되었기를 간절히 바라겠습니다

그럼 수고하세요
김성호_1
비정기 조언자

스크립트 문의 백그라운드 실행 sleep

답변 감사드립니다...

추가로 궁금한 점이 있습니다...



해당 스크립트 파일을 삭재해도 백그라운드로 실행되는 스크립트 파일은 PID로 죽이지 않는한 계속 실행이 됩니다...



PID 를 가지고 돌고 있는 애들 구동방식이 궁금합니다.

자세하지 않아도 좋습니다...

책보세요.. 보다는 좀더 구체적인 답변기대합니다...



감사합니다 ~~~
김영민_7
임시 조언자

스크립트 문의 백그라운드 실행 sleep

안녕하세요.

모든 프로세스는 PPID(Parent Process ID), 즉 부모 프로세스가 있습니다.

부모 없는 자식 없다는 말이죠.

우선 로긴을 해서 작업을 한다고 가정했을때,

로긴을 하게 되면 init process로부터 PID (Process ID)를 부여 받게 됩니다. 로긴을 했다면 ksh가 첫번째 프로세스가 되겠지요.

그 쉘에서 다른 쉘 프로그램을 실행을 하게되면 쉘 프로그램은

ksh로 부터 PID를 부여 받아 프로그램을 실행하게 됩니다.

그리고 프로그램이 끝나면 죽게 되죠.

이게 프로세스의 life cycle 이라고 보시면 됩니다.



부모없는 자식이 없다는 말은 여기서 비롯되는데,

부모를 죽이면 자식도 같이 죽게 됩니다.

허나, 부모 없는 자식이 간혹 있기도 합니다.

이를 좀비 (zombie) 프로세스라고 합니다.

이는 init 프로세스를 부모로 선택하기도 하지만,

좀비를 완전히 없애기 위해서는 리부팅이 필요할 경우도 있습니다.

도움이 되셨는지 모르겠습니다.

그럼 수고하세요 ^^