문제

명령을 사용할 수 있습니다 LSOF 실행중인 모든 프로세스에 대한 파일 설명자를 얻는 것은 해당 프로세스 내부에 있지 않고 해당 설명 자 중 일부를 폐쇄하는 것입니다. 이 작업은 Windows에서 수행 할 수 있으므로 일부 응용 프로그램을 쉽게 차단 해제 할 수 있습니다.

그것에 대한 명령이나 기능이 있습니까?

도움이 되었습니까?

해결책

Windows에서는 누군가가 장치 드라이버를 실행중인 커널에 삽입하는 프로그램을 작성하여 프로그램을 사용하여이를 수행 할 수 있습니다. 그건 그렇고, 깨진 응용 프로그램이 사용중인 손잡이를 닫은 후에는 응용 프로그램이 핸들이 닫혀 있음을 알지 못하고 응용 프로그램이 다른 관련없는 객체를 열면 알 수 없기 때문에이 작업을 수행하는 것이 위험 할 수 있습니다. 동일한 핸들이 이제 다른 관련이없는 객체를 참조 할 수 있습니다. 가능한 빨리 깨진 응용 프로그램을 죽이고 싶습니다.

리눅스에서는 반드시 동일한 종류의 기술을 사용할 수 있습니다. 모듈을 실행중인 커널에 삽입하는 프로그램을 작성하십시오. 모듈과 통신하고 어떤 손잡이를 닫을 지 알 수 있습니다. 그렇게하는 것은 똑같이 위험 할 것입니다.

다른 팁

왜이 작업을 수행하려고하는지 모르겠지만 GDB를 사용하여 프로세스에 첨부 한 다음 FD에서 Close ()를 호출 할 수 있어야합니다. 예시:

하나의 껍질에서 : 고양이

다른 껍질에서 :

$pidof cat
7213

$gdb -p 7213

...
lots of output
...

(gdb)

이제 GDB에 닫기 (0)를 실행하도록 지시합니다.

(gdb) p close(0)

$1 = 0

(gdb) c

Continuing.

Program exited with code 01.
(gdb)

첫 번째 쉘에서 나는이 출력을 얻는다 :

cat: -: Bad file descriptor

cat: closing standard input: Bad file descriptor

나는 그렇게 생각하지 않지만 LSOF는 당신에게 파일을 열었던 프로세스의 PID를 제공하므로, 당신이 할 수있는 일은 프로세스를 완전히 죽이거나 최소한 신호를 보내도록 신호를 보내는 것입니다.

나는 그것을 의심한다. 파일 설명자는 프로세스 로컬이며 stdout 모든 프로세스에 1이지만 여전히 고유 한 스트림을 참조합니다.

아마도 당신이 해결하려는 차단 문제에 대해 더 자세한 내용은 유용 할 것입니다.

Windows보다 Unix 에서이 작업을 수행 할 필요가 훨씬 적습니다.

Windows에서 대부분의 프로그램은 열린 파일을 "잠금"(실제로 공유 거부)하는 경향이 있으므로 다른 프로그램에서 읽거나 서면/삭제할 수 없습니다.

유닉스에서는 대부분 이런 일이 일어나지 않습니다. UNIX에서 파일 잠금은 대부분 권고 사항이며 일반 읽기/쓰기/삭제 작업이 아닌 다른 잠금 시도 만 차단합니다. 프로세스의 현재 디렉토리를 제거 할 수도 있습니다.

유일한 상황에 대해 이것은 UNIX에서 정상적인 사용으로 나타나는 것입니다. 파일 시스템을 umpount하려고 할 때 (장착 된 파일 시스템에 대한 참조는 umount를 차단할 수 있음)입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top