Linux에 killall과 동일한 C 라이브러리가 있습니까?

Linux에 killall과 동일한 C 라이브러리가 있습니까?

killall응용 프로그램을 알고 있지만 PID런타임에 가져올 수 없으므로 비슷한 명령으로 다른 응용 프로그램을 종료하고 싶습니다 .

이 작업은 C 코드로 수행되어야 합니다. 알아요. kill()하지만 꼭 필요해요 PID. killall과 동등한 다른 것이 있습니까?

답변1

kill(2)프로세스에 신호를 보내는 시스템 호출이므로 이 유틸리티와 동등한 기능은 없습니다 killall.

C에서 이를 수행하는 쉬운 방법은 killallsystem(3) 라이브러리 함수나 popen(3)을 사용하여 C 프로그램에서 이를 호출하는 것입니다.

또는 의사 파일 시스템에 대한 매뉴얼 페이지를 읽고 /proc명령 이름을 검색하여 pid를 직접 찾을 수 있습니다.

man 2 kill
man 3 system
man 3 popen
man 5 proc

답변2

제목의 질문에 대답하자면, 이 일치를 수행할 수 있는 C 라이브러리가 없습니다. 심지어 libprocps도 이 작업을 수행하지 않습니다.

Killall은 간단한 프로그램입니다:

  • 어울리는 것을 찾아보세요
  • 이름에 숫자만 포함된 /proc의 디렉토리를 효과적으로 찾고 해당 디렉토리 아래의 파일과 일치합니다.

일반적이므로(즉, 사용자가 어떤 일치 기준을 사용할지 미리 알 수 없음) 일치하는 항목이 많습니다. 무엇을 일치시키고 싶은지 이미 알고 있어야 합니다. 귀하의 질문은 실제로 그렇게 말하지는 않지만 이름이나 명령줄처럼 들립니다.

나는 전체적인 접근 방식에 대해 정말로 조심합니다. 프로세스는 실제로 자신이 접촉하고 있는 다른 프로세스를 식별해야 합니다. 이름은 쉽게 위조할 수 있기 때문에 일치하지 않습니다. 또한 동일한 이름을 가진 두 명의 사용자 또는 두 개의 시스템이 있을 수 있다는 점을 고려하십시오. 어떤 프로세스를 종료해야 합니까?

PID 파일이나 프로그램 시작 시 PID를 기록하는 다른 방법은 어떤 프로세스에 대해 이야기하고 있는지 정확히 알 수 있기 때문에 훨씬 더 좋습니다(포크되지 않는 한).

Richard가 위에서 지적했듯이 killall 코드는 GPL2+이므로 동일한 라이센스 하에서 재사용할 수 있습니다. 프로젝트가 gitlab으로 이전되었으며 현재 위치는 다음과 같습니다.https://gitlab.com/psmisc/psmisc

관련 정보