2011-01-05 4 views
0

나는 다음을 수행하고 싶습니다 : 나는 파일 F에 프로세스 A를 링크 할프로세스를 bash에서 파일에 링크 할 수 있습니까?

, 그래서 :

  • 을 F가 충돌 사라져합니다.
  • F는 A가 완료되면 사라집니다.

이것은 가능합니까? 고맙습니다.

+0

달성하기 위해. –

+0

2 개의 프로세스를 모니터링하고 싶습니다. 따라서 하나가 충돌하는 경우 다른 프로세스도 충돌하게 만듭니다. 다른 프로세스가 동일한 PID로 시작할 수 있기 때문에 PID로 죽이는 것은 좋은 방법이 아닙니다. 따라서 PID를 사용하지 않는 방법을 찾고 있습니다. –

답변

0

PID는 피해야합니다. 그것들은 프로세스 식별자이며 사용되어야합니다.

Bash는 시작하는 하위 프로세스를 자동으로 모니터합니다. 가장 최근의 백그라운드 프로세스 ID는 $!에서 관리됩니다. Bash는 '% n'구문을 사용하여 작업 제어를 지원합니다.

트랩 SIGCHLD를 사용하여 하위 procs 상태 변경을 트랩 할 수 있으며 하나 또는 모든 하위 프로세스가 wait 명령을 완료하도록 "대기"할 수 있습니다. 여기

가 시작되는 "작업 1"과 "작업 2"로 구성하여 두 프로세스 모니터링의 대략적인 근사치 인 샘플 스크립트 :

당신이 무슨 말을 하려는지 말했다 경우 아마 도움이 될
job1 & # start job1 in background 
j1pid=$! # get its process id 
job2 & # start job2 in background 
j2pid=$1 # get its process id 

trap 'err=1' ERR # trap all errors 
err= 
wait $j1pid # wait for job1 to complete 

# at this point job1 could have completed normally, 
# or either process could have had an error 

trap - ERR # revert to "normal" handling of most errors 

# kill the processes nicely, or abruptly 
# kill -TERM sends the TERM signal to the process, which it can trap 
# and do whatever pre-exit process is needed. 
# kill -9 cannot be trapped. 

for pid in $j1pid $j2pid ; do 
    kill -TERM $pid 2>/dev/null || kill -9 $pid 
done 
0

이미 Linux에서이 속성이 거의 비슷한 파일이 있습니다. 프로세스를 생성했다면 프로세스가 살아있는 동안/proc/procNum이 존재하게됩니다. 예를 들어 프로세스 번호가 1050이면/proc/1050은 프로세스가 종료 될 때까지 존재합니다. 이 파일을 지우면 프로세스가 죽을 지 모르지만 둘 다 묶으려고 할 수는 있습니다.

+0

정보를 제공해 주셔서 감사합니다! 나는 그것을 검사했고 많은 파일을 담고있는 디렉토리이다. sudo를 사용하더라도 제거 할 수 없기 때문에 내가 원하는 것을 할 수 없다. 어쨌든 고마워요 :) –

관련 문제