하나의 명령으로 Linux에서 프로세스를 종료하고 다시 실행하는 방법

하나의 명령으로 Linux에서 프로세스를 종료하고 다시 실행하는 방법

일반적으로 저는 psLinux에서 이 명령을 사용하여 프로세스의 pid를 찾은 다음 해당 pid를 사용하여 프로세스를 종료한 다음 해당 특정 프로세스에 대한 특정 명령을 사용하여 프로세스를 다시 실행합니다.

내 질문은 - 단일 명령으로 프로세스를 어떻게 종료하고 다시 실행할 수 있습니까?

가능합니까?

답변1

PID를 얻은 다음 /prc/$pid/cmdline파일을 읽어 시작하는 데 사용된 명령을 확인할 수 있습니다.

pid=123
com=$(perl -pe 's/\0/ /g' /proc/$pid/cmdline)
kill 123 && "$com"

따라서 이를 함수로 바꿀 수 있습니다.

restartPid(){
    pid=$1
    com=$(perl -pe 's/\0/ /g' /proc/"$pid"/cmdline)
    kill 123 && "$com"
}

그러나 이는 특정 환경에서 명령을 실행하는 보다 복잡한 경우에는 작동하지 않습니다. 더 많은 생성을 시작하고 다음과 같은 환경을 포함하도록 확장할 수 있습니다.

restartPid(){
  pid=$1
  tempFile=$(mktemp)
  perl -pe 's/\0/\n/g' /proc/"$pid"/environ |
    perl -pe 's/^([^=]+)=(.*)/$1="$2"/' > "$tempFile"
  read -r com args < <(perl -lne '@k=split(/\0/); print "$k[0] ",  join " ", map "\"$_\"", @k[1..$#k]' /proc/"$pid"/cmdline)
    dir=$(readlink -f "/proc/$pid/cwd")    
    kill $pid
    ( . \"$tempFile\"; cd "$dir"; eval $com $args )
}

그러나 보시다시피 이는 매우 복잡해지며 항상 작동한다고 보장할 수 없습니다. 하지만 좋은 시작이어야 합니다.

관련 정보