리눅스에서 비활성 프로세스를 깨우는 방법은 무엇입니까?

리눅스에서 비활성 프로세스를 깨우는 방법은 무엇입니까?

를 통해 Linux 시스템에 연결하고 있습니다 ssh. 나는 세션에서 로그아웃한 후에도 계속 실행되는 screen여러 프로세스를 실행 하고 있었습니다. 그러나 일정 시간이 지나면 프로세스는 stdout메모리를 차지함에도 불구하고 출력 생성을 중지합니다. 다시 활성화하는 방법을 알고 싶습니다. 내 사용자 이름 아래의 프로세스 목록은 다음과 같습니다( top -u MY_USERNAME).

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1268 abcdef    20   0  100m 2044 1012 S  0.0  0.0   0:00.03 sshd
 1269 abcdef    20   0  105m 1940 1456 S  0.0  0.0   0:00.06 bash
12375 abcdef    20   0  115m 1452  808 S  0.0  0.0   0:00.02 screen   # contains python procs
12615 abcdef    20   0  406m  58m 2140 S  0.0  0.0   0:02.23 python   # parent process
12618 abcdef    20   0 5170m 4.7g 1176 S  0.0  1.9 546:19.26 python   # child process
12619 abcdef    20   0 5164m 4.7g 1172 S  0.0  1.9 539:33.64 python   # child process
12620 abcdef    20   0 5185m 4.7g 1172 S  0.0  1.9 547:46.92 python   # child process
12621 abcdef    20   0 5171m 4.7g 1168 S  0.0  1.9 540:45.53 python   # child process
12622 abcdef    20   0 5179m 4.7g 1172 S  0.0  1.9 546:50.28 python   # child process
12623 abcdef    20   0 5171m 4.7g 1168 S  0.0  1.9 549:20.39 python   # child process
12624 abcdef    20   0 5178m 4.7g 1172 S  0.0  1.9 543:33.55 python   # child process
12625 abcdef    20   0 5177m 4.7g 1172 S  0.0  1.9 545:59.51 python   # child process

해당되는 경우: 프로세스에 사용자 입력이 필요하지 않습니다. 나는 특권이 없습니다 sudo.

아래에서 볼 수 있습니다에스열에는 모든 프로세스가 지정됩니다 S. 어떻게 변경합니까 R? 이를 통해 출력을 재개할 수 있습니까 stdout?

참고: 질문을 확인했습니다.여기그러나 이는 프로세스를 수동으로 일시 중지하고 깨우는 것을 의미합니다. 처음에 내 프로세스가 왜 잠자기 상태인지 잘 모르겠고 깨우고 싶습니다.

편집 : 질문을 확인한 후여기strace -p 12622, 하위 프로세스에 대한 명령을 실행하고 다음을 얻습니다 futex(0x984271b0, FUTEX_WAIT_PRIVATE, 0, NULL.위키피디아일종의 자물쇠였다고 하네요. 이것이 중요한지 잘 모르겠습니다.

답변1

커널 디자이너가 아닌 경우 "휴면"은 이 프로세스 상태에 대한 올바른 비유가 아닙니다. "기다림"이 더 나은 설명일 수 있습니다. 깨어나기를 기다리는 직관적인 의미에서 '잠자는 것'을 '멈춘 것'이라고 하며 로 표시한다 Z.

프로세스는 사용자가 깨어날 때까지 기다리지 않고 특정 조건이 충족될 때까지 기다립니다. 예를 들어, 파일에서 데이터를 읽고 디스크에서 데이터가 로드되기를 기다리는 중이거나, 네트워크 연결을 제공하고 들어오는 패킷을 기다리는 중이거나, 설정된 시간 동안 일시 중지하고 시간 초과가 만료될 때까지 기다리는 등입니다. "깨어나다" 유일한 방법은 조건을 충족하도록 준비하는 것입니다.

당신이 발견한 대로 전화를 걸면strace -p $PID(Linux 또는 기타 UNIX 변종의 이에 상응하는 것)은 프로세스가 수행 중인 작업, 특히 대기 중인 작업을 낮은 수준의 관점에서 알려줄 수 있습니다. 그러나 이것이 유용한 데이터를 제공한다는 보장은 없습니다. ㅏ퓨텍스일반적으로 누가 잠금을 해제해야 하는지 알 수 있는 유일한 방법은 프로그램이 수행하는 작업과 기본 라이브러리가 해당 핵심 잠금 기능을 어떻게 사용하는지 정확히 이해하는 것입니다.

프로그램이 입력 수신을 중단했기 때문에 출력 생성이 중단되었을 수 있습니다. 프로그램 중 하나가 실행 중이고 다른 프로그램이 대기 중인 경우도 있습니다. 프로세스가 교착 상태에 빠지게 만드는 버그가 프로그램에 있을 수 있습니다. 문제가 무엇이든 그것은 시스템 문제가 아니라 애플리케이션 문제입니다. 프로그램을 "깨우기" 위한 보편적인 방법은 없습니다. 프로그램이 정상적으로 실행됩니다. 당신이 원하는 일을 하지 않을 수도 있지만, 쓰여진 일을 하고 있는 것입니다.

관련 정보