2014-11-28 6 views
-3

나는이 경연 대회에서 동일한 디렉토리에서 내 프로그램으로 실행되는 프로세스를 죽일 필요가 있습니다. 프로그래밍 언어는 중요하지 않습니다. 리눅스에서 작동하는 언어가 될 수 있습니다. C 언어를 선택합니다. 언어를 잘 알고 있기 때문에 (다른 언어를 사용하면 기쁘게 생각합니다).동일한 디렉토리에서 프로세스를 종료

나는 kill 기능으로 프로세스를 죽일 수 있다는 것을 알고 있지만 디렉토리에서 프로세스의 ID를 얻고 그를 죽이는 방법을 모른다. 또한 내 프로그램은 자신을 방어해야하며 죽이지 않아야합니다.

어떻게 이런 식으로 최선을 다할 수 있습니까?

+0

"같은 디렉토리에있는"프로세스에서 무슨 의미가 있습니까? 프로그램이 위치한 디렉토리를 탐색하고이 디렉토리에서 찾을 수있는 프로그램의 실행중인 인스턴스를 모두 종료하려는 것입니까? 좀 더 구체적인 방법이 필요합니다. – DarkDust

+0

나는 모든 프로그램이 내 프로그램을 포함하여 tmp 디렉토리에 있으며 위에서 설명한 것처럼 내가 그들을 죽일 필요가 있음을 의미한다. – WingMan

+1

** 당신이 말한 프로세스와 디렉토리 사이의 관계가 명확하지 않음 - 개선 해주십시오. ** 프로세스 생성/실행에 사용 된 바이너리는 디렉토리에 있습니다. 그게 당신이 "같은 디렉토리에서 나와 함께 움직이는 프로세스"가 의미하는 것입니까? 다른 가능한 관계는 보통'/ proc' 안의 하위 디렉토리에있는 프로세스 PID 파일이거나 프로그램이 chroot 환경으로 사용하는 디렉토리 일 것입니다. – jweyrich

답변

0

같은 디렉터리에서 시작된 프로그램을 종료해야하는 경우 /proc 폴더를 사용하여 해당 프로그램을 확인할 수 있습니다.

pwd=$(readlink -f .) 
cd /proc 
for i in *; do 
    [ "$(readlink -f $i/cwd)" == "$pwd" ] && kill $i; 
done 
+0

'cwd'는 현재 작업 디렉토리입니다. 쉘을 열고 PID를 찾아서 다른 디렉토리에'cd'하고 프로세스의'cwd' 링크가 바뀌는 지 지켜보십시오. 'exe'는 당신이 원한 것입니다 (당신이'dirname'을 원한다는 뜻입니다). – DarkDust

+1

@DarkDust, 그것은 @jweyrich가 지적한대로 질문을 어떻게 해석 하느냐에 달려 있습니다. 폴더에서 실행중인 프로그램을 찾으려면 'cwd'가 해당 폴더로 설정된 프로그램입니다. 그 폴더에서 실행중인 프로그램을 찾고 싶다면'exe' 것입니다. – fejese

관련 문제