2014-03-31 2 views
0

시스템의 모든 프로세스의 표준 입력에 장치 파일 (/dev/tty* 또는 /dev/pts/*)이 연결되어 있어야합니다. tty(1) 프로그램과 비슷한 것을 구현하고 싶지만 어떤 프로세스에서도 작동합니다. 어떻게해야합니까? 이것은 Linux에 있습니다.리눅스의 모든 프로세스의 stdin에 연결된 tty 장치 파일 찾기

가장 가까운 파일은 /proc/pid/stat 파일을 구문 분석하고 6 번째 열을 읽는 것입니다. 이 번호는 내가 st_rdev에 해당하는 번호를 제공합니다. 숫자를 얻기 위해 /dev/tty*/dev/pts/* 파일에 stat(2)을 실행하고 다시 매핑해야합니다. 이것이 psutil 패키지에서 사용 된 접근 방식입니다.

업데이트 : 구현 세부 사항보다는 내가 찾고있는 것에이 질문을 다시 언급했습니다.

+0

두 번째 부분에서는 장치 노드가 동적으로 만들어 질 수도 있고 (udev, ...), 아직 존재하지 않을 수도 있습니다. 아마도 대부분의 장치 노드는 (아마도 USB 직렬 변환기 등을 제외하고는)'/ dev'의 어딘가에 항상 존재할 것으로 예상됩니다. – ninjalj

답변

3

Linux에서는 프로세스 ID가 pid 인 프로세스의 stdin과 연결된 tty를 얻으려면 ls -L /proc/pid/fd/0을 수행하면됩니다.

+0

그게 지금 해왔습니다. 나는 그것을 당분간 그 것처럼 남겨 둘 것입니다. 무언가가 물면, 나중에 다시 살펴볼 것입니다. –

0

음, the manual page 상태 :

st_dev 필드는이 파일이있는 장치를 설명합니다. (major (3) 및 minor (3) 매크로는이 필드에서 장치 ID를 분석하는 데 유용 할 수 있습니다.)

st_rdev 필드는이 파일 (inode)이 나타내는 장치를 설명합니다.

그래서 첫 번째 (st_dev)를 나타내는 장치의 실제 아이 노드 당신이 상주을 검사하는, 즉 /dev 디렉토리를 보유 디스크. 이것은 크기와 같은 inode에 대한 일반적인 메타 정보입니다.

기타 (st_rdev)는 드라이버를 장치 파일에 매핑하는 데 사용됩니다. /dev/ttyUSB0 또는 무엇인가. 이것은 기본적으로 장치 특수 파일의 내용입니다.

두 번째 질문에 대해서는 잘 모르겠다. 마운트 된 장치 목록과 교차 색인을 작성한 다음 재귀 적으로 적절한 장치를 스캔해야합니다.

+0

흠. 그건 제가 생각한 것이 아닙니다. 제 신청서를 한 번 더 살펴 보겠습니다. 나는 그 질문을 육체로 만들거야. 감사. –

+0

나는이 질문에 대해 완전히 다르게 언급했기 때문에이 대답은 무관계하게 보일 수 있습니다. –

관련 문제