Mac OS X에서 프로세스를 종료하고 자체적으로 다시 시작하지 않는 방법


29

sudo kill -9 [PID]적절한 프로세스 ID로 실행 하면 프로세스가 중지 된 다음 다시 시작되고 새 PID가 있습니다. mysqld프로세스 를 죽이려고합니다 .

프로세스 종료시 활동 모니터를 어떻게 모방 할 수 있습니까? 활동 모니터에서 "프로세스 종료"를 누르면 프로세스 실행이 영구적으로 중지되고 완전히 종료됩니다. 나는 그것이 kill똑같은 일 을 할 것이라고 생각합니까?

활동 모니터와 터미널이 서로 옆에있어 명령이 작동하는지 확인할 수 있지만 할 때마다 sudo kill -9 [PID]활동 모니터의 프로세스가 사라지지 않고 새로운 PID로 새로 고칩니다.

그렇다면 ... mysqld터미널을 통해 프로세스를 어떻게 종료합니까 ?


'kill'명령이 PID를 인식하지 못했기 때문에 활동 모니터에서 수행했습니다. 귀하의 경우와 달리 my mysqld는 Activity 모니터에서 종료하자마자 다시 시작되지 않았습니다.
Yoosaf Abdulla

아야! 꼭 필요한 경우가 아니면 -9를 사용하지 마십시오. 프로세스를 수행하는 것은 폭력적인 일입니다. 다른 신호는 프로세스를 순서대로 종료하지만 -9는 종료하지 않습니다! 따라서 예를 들어 RAM 버퍼가 디스크로 플러시되지 않습니다. 이것은 작업을 수행하는 데이터베이스에 대해 특히 나쁜 일입니다. 손상된 테이블로 돌아옵니다.
Jan Steinman 2

답변:


22

죽이는 프로세스는 아마도 launchd 에 의해 관리되고있을 것입니다. 프로세스 를 중지하고 다시 시작하지 않는 올바른 방법은 사용하는 것 launchctl unload <path to plist>입니다. 해당 프로세스를 제어하는 ​​plist는 /Library/LaunchDaemons또는에 /System/Library/LaunchDaemons있습니다. 자신의 프로세스가 아닌 시스템 프로세스 인 경우 원하는대로 작업 하려면 사용해야 sudo합니다 launchctl.

더 좋은 방법은 시도하고 중지하는 것입니다.

${MYSQL_HOME}/bin/mysqladmin -u root -proot shutdown > /dev/null 2>&1

mysqld프로세스 를 죽이려고합니다 . 이것이 LaunchDaemons의 일부인지 확실하지 않지만 ... 다음 명령은 서버 실행을 중지하는 올바른 방법 sudo /usr/local/mysql/support-files/mysql.server stop이지만 문제가 있으므로 프로세스를 직접 종료하려고합니다.
Hristo

4
실행 된 후에 다시 시작 kill -9되면 간접적 일지라도 관련이있을 수 있습니다. 다음을 사용하여 알 수 있습니다launchctl list

목록에는 "mysql"이 없습니다. 나는 당신의 명령을 위로 시도합니다.
Hristo

STDOUT 및 STDERR을 / dev / null로 경로 재 지정하십시오.
Hello71

7
나는 같은 문제가 있었고 mysql을 통해 시작에서 제거하여 해결할 수있었습니다. sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Jeff

11

두 사람의 의견에 따르면 "런칭 된 것이 아마도 관련이있을 것"이라고 언급했습니다. 그래서 나는 이것을 추가 답변으로 제시 할 것이라고 생각했습니다. @ jarrod-roberson이 말했듯이 먼저 실행하여 launchd가 포함되어 있는지 확인할 수 있습니다 launchctl list | grep mysqld.

여기서 중요한 것은 MySQL이 Homebrew와 함께 설치되었는지 여부입니다. Brew는 launchctl파일을 OSX가 "일반적인"서비스를 제공하는 곳과 다른 위치에 저장 합니다.

내 OSX 상자에서 plist파일은 다음과 ~/Library/LaunchAgents/같습니다.

launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

MySQL 서버를 중지합니다. 나는 이전에보고했다 /Library/LaunchDaemons/하고 /Library/LaunchAgents있지만 가진 파일 찾을 수 없습니다 mysqld이름에 있습니다.

services이 게시물 ( http://robots.thoughtbot.com/starting-and-stopping-background-services-with-homebrew I)에 설명 된대로 이라는 BREW 기반 시스템을 설치하여 모든 BREW 설치 서비스 응용 프로그램을 관리 할 수 있습니다. 그러나 이것을 직접 시도하지 않았으므로 YMMV.


2
이것이 나를 위해 고친 것입니다. LAMP 스택을 로컬로 실행하는 여러 가지 다른 방법으로 싸울 때 항상 고통 스럽습니다.
Patrick

나는, 즉이를 제거 브루 경로를 사용했다/usr/local/opt/mysql/homebrew.mxcl.mysql.plist
micjamking

10

TERM신호 를 보내 프로세스를 종료하려고 시도했지만 작동했습니다. 명령은 다음과 같습니다.

sudo kill -15 {PID}

8

나를 위해, 이것은 내가 찾고있는 레이블을 알아 내면 효과적이었습니다.

launchctl list | egrep {DESIRED_LABEL}   
launchctl remove {DESIRED_LABEL}

6

서비스를 언로드하고 데몬을 중지하십시오.

sudo launchctl unload -w /Library/LaunchDaemons/com.mysql.mysql.plist

서비스를로드하고 데몬을 시작하십시오.

sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist

이것은 com.oracle.oss.mysql.mysqld.plist 내 로컬 MySQL이 homebrew를 통하지 않고 MySQL에서 다운로드하여 설치 되었다는 것을 제외하고는 나를 위해 일했습니다 .
Jason

2

어떤 프로세스를 죽이려고합니까? Mac OS X의 일부 프로세스 (예 : Dock, 일부 시스템 프로세스)는 종료되면 자동으로 다시 생성됩니다.


나는 mysqld프로세스 를 죽이려고 노력하고 있다
Hristo

아마에 의해 관리되고 launchd프로세스가 종료되면 다시 시작됩니다.
mipadi

1

/Library/LaunchDaemons/com.mysql.mysql.plist 파일 편집을 해결하여 true 속성을 false로 변경했습니다.

<!--?xml version="1.0" encoding="UTF-8"?-->
<plist version="1.0">
  <dict>
    <key>KeepAlive</key>
    <false />
    <key>Label</key>
    <string>com.mysql.mysqld</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/mysql/bin/mysqld_safe</string>
      <string>--user=mysql</string>
    </array>
  </dict>
</plist>

0

컴퓨터에서 mysql을 차단하는 프로세스가 실행 중입니다. 운영

ps auxwww | grep mysql

그런 다음

kill -15 {PID}

차단하고 있던 프로세스는 _mysql

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.