다른 TTY 세션의 STDIN 스트림 버퍼에서 데이터 제거

다른 TTY 세션의 STDIN 스트림 버퍼에서 데이터 제거

얼마 전 tty별도의 터미널 창에서 여러 세션을 실행하는 데 문제가 발생했습니다. 비용이 많이 드는 디스크 액세스 명령을 실행하고 해당 명령이 반환되기를 기다리고 있습니다. 동시에 나는 tty그래픽 데스크톱 환경 내의 별도 창에서 다른 세션으로 작업하고 있었습니다.

실수로 디스크 액세스 명령(기본적으로 명령)을 실행하는 터미널에 초점을 맞추고 cp터미널에 다음을 입력했습니다. 내 다른 창에 입력할 것이라고 생각했습니다.

Enter

기반으로이 문제나는 데이터가 이제 STDIN실행되자마자 첫 번째 명령이 반환되기를 기다리는 데이터 스트림 버퍼 에 있다는 것을 알고 있습니다 cp. 아시다시피, 저는 방금 명령을 다시 실행하라고 말했습니다:/.

질문

시간이 좀 있으니(이 명령을 반환하는 데 30분 이상이 소요됨) bash가 완료 중인 프로세스를 다시 실행하기 전에 이러한 문자를 버퍼에서 플러시할 수 있는 방법이 있습니까 STDIN?tty

아니면 다른 bash 인스턴스의 파일 스트림 버퍼에서 데이터를 플러시하는 것 외에 내가 기다리고 있는 프로세스가 완료되자마자 데이터 평가를 방지할 수 있는 다른 방법이 있습니까?

답변1

귀하의 tty에 noflsh해당 플래그가 꺼져 있으면 확인할 수 있습니다

stty -a < /dev/pts/whatever | grep -e -noflsh

다른 tty에서 실행되지만 기본적으로 꺼져 있습니다. 그러면 입력 중단, 종료 또는 정지 문자가 입력 대기열을 플러시합니다. Ctrl-Z따라서 , 를 입력하면 fg현재 실행 중인 명령이 일시 중단되고 입력이 새로 고쳐진 다음 명령이 다시 시작됩니다.

답변2

어쩌면 bash에 SIGSTOP을 보내서 아무것도 하지 못하도록 하고, 작업이 완료되면 bash에 SIGKILL을 보내야 할 수도 있습니다.

SIGSTOP은 bash가 작업이 완료될 때까지 기다리지 않도록 방지합니다. 그렇지 않으면 좀비 상태가 됩니다. SIGKILL 초기화 후에는 임무 규모가 재조정되고 좀비가 사라집니다.

관련 정보