centos-백그라운드 프로세스

centos-백그라운드 프로세스

컴퓨터가 있고 Wi-Fi 인터페이스에서 tcpdump를 실행하려면 sudo 권한이 필요합니다. 따라서 이와 같은 백그라운드 작업을 실행하면

sudo tcpdump -i wlp8s0 'port 80' &

(아무 출력도 얻지 못하기 때문에 이것이 무의미하다는 것을 알고 있지만 생각해 봅시다)

따라서 루트가 아닌 사용자 범위에서 시작된 백그라운드 프로세스를 종료해야 할 때 일반적으로 다음과 같이 합니다.

Kill %1 ###1은(는) 백그라운드 작업 번호입니다.

하지만 이는 해당 작업이 허용되지 않음을 의미합니다.

그럼 나는 이것을 할 것이다.

Sudo가% 1을(를) 죽였습니다

그러나 이는 루트 사용자가 시작한 백그라운드 작업을 종료해야 하는 것과 같습니다(그렇지 않습니다).

실제로 작업의 프로세스 ID를 가져와서 이를 사용하여 종료해야 합니다.

루트가 아닌 사용자를 사용하여 sudo 범위 내에서 작업을 시작하고 잔인하지 않고 정상적으로 종료하는 방법에 대한 아이디어가 있습니까?

답변1

당신은 그것을 사용할 수 있습니다

sudo kill "$!"

최근에 시작된 백그라운드 작업을 종료합니다.

일을 시작하면 더 쉬울 거예요

sudo tcpdump ... & pid="$!"

그 다음에

sudo kill "$pid"

특정 작업을 종료합니다.

프로세스 sudo자체는 여러분의 프로세스처럼 실행되지만 모든 신호를 자식 프로세스(이 경우)로 전달합니다 tcpdump. 즉, 프로세스를 종료하려면 신호를 보낼 수 있는 적절한 권한이 있어야 합니다.

sudo매뉴얼 에서 (Ubuntu 시스템의 경우):

I/O 로깅 플러그인이 구성되거나 보안 정책에서 이를 명시적으로 요청하는 경우 새 의사 터미널("pty")이 생성되고 두 번째 sudo 프로세스를 사용하여 사용자의 기존 pty와 새 pty 제어 간에 작업을 전달합니다. 신호 pty가 명령을 실행 중입니다. 이 추가 프로세스를 통해 명령을 일시 중지하고 재개할 수 있습니다.

[...]

명령이 sudo 프로세스의 하위로 실행되면 sudo는 수신한 신호를 명령에 전달합니다. SIGINT 및 SIGQUIT 신호는 명령이 새 pty에서 실행되거나 커널이 아닌 사용자 프로세스에 의해 신호가 전송되는 경우에만 전달됩니다.

관련 정보