Làm thế nào để giết tiến trình trong Mac OS X và không tự khởi động lại


29

Khi tôi chạy sudo kill -9 [PID]với ID tiến trình thích hợp, quá trình dừng lại nhưng sau đó được khởi động lại và có một PID mới. Tôi đang cố gắng để giết mysqldquá trình.

Làm cách nào tôi có thể bắt chước Trình giám sát hoạt động trong việc giết quá trình? Trong Trình giám sát hoạt động, khi bạn nhấn "Thoát quy trình", quy trình sẽ ngừng chạy vĩnh viễn, nó hoàn toàn chấm dứt. Tôi nghĩ rằng killsẽ làm điều tương tự phải không?

Tôi có cả Trình giám sát hoạt động và thiết bị đầu cuối cạnh nhau để xem lệnh có hoạt động không, nhưng mỗi khi tôi thực hiện sudo kill -9 [PID], quy trình trong Trình giám sát hoạt động sẽ không biến mất, nó chỉ làm mới với một bộ điều khiển mới.

Vậy ... làm thế nào để tôi giết mysqldquá trình thông qua thiết bị đầu cuối?


Tôi đã làm điều đó từ trình giám sát hoạt động vì lệnh 'kill' không nhận ra được PID. Một lần nữa, không giống như trường hợp của bạn, mysqld của tôi đã không khởi động lại ngay khi tôi giết nó từ màn hình Activity.
Yoosaf Abdulla

Ôi! Đừng sử dụng -9 trừ khi bạn THỰC SỰ cần. Đó là một điều bạo lực để làm cho một quá trình. Các tín hiệu khác cho phép một quá trình chấm dứt một cách có trật tự, nhưng không -9! Vì vậy, điều đó có nghĩa là bộ đệm RAM không bị xóa vào đĩa chẳng hạn. Đây là một điều đặc biệt tồi tệ đối với cơ sở dữ liệu đang trong quá trình thực hiện công việc; bạn sẽ quay trở lại các bảng bị hư hỏng.
Jan Steinman

Câu trả lời:


22

Quá trình bạn đang giết có lẽ đang được quản lý bởi launchd , cách thích hợp để ngăn chặn nó và không khởi động lại là sử dụng launchctl unload <path to plist>. Plist kiểm soát quá trình đó là một trong hai /Library/LaunchDaemonshoặc /System/Library/LaunchDaemons. Nếu đó là một quy trình hệ thống và không phải là một quy trình của riêng bạn, thì có lẽ bạn sẽ phải sử dụng sudođể có được launchctlcông việc như mong muốn.

Một cách tốt hơn để thử và dừng nó có thể là;

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

Tôi đang cố gắng để giết mysqldquá trình. Tôi không chắc đó có phải là một phần của LaunchDaemons không ... nhưng lệnh sau đây là cách chính xác để ngăn máy chủ chạy sudo /usr/local/mysql/support-files/mysql.server stopnhưng tôi gặp vấn đề với điều đó, vì vậy tôi đang cố gắng giết trực tiếp quá trình.
Hristo

4
nếu nó được khôi phục sau khi kill -9launchd có thể liên quan, ngay cả khi gián tiếp. bạn có thể biết bằng cách sử dụnglaunchctl list

danh sách này không có "mysql" trong đó. Tôi sẽ thử lệnh của bạn lên đầu.
Hristo

Chuyển hướng STDOUT và STDERR sang / dev / null.
Xin chào71

7
Tôi đã có cùng một vấn đề và đã có thể giải quyết bằng cách xóa mysql khỏi launchd qua sudo launchctl unload /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Jeff

11

Một vài ý kiến ​​đề cập rằng "launchd có thể có liên quan" - vì vậy tôi nghĩ rằng tôi đã đưa ra điều này như một câu trả lời bổ sung. Như @ jarrod-roberson nói, bạn có thể kiểm tra xem launchd có liên quan đến lần chạy đầu tiên không launchctl list | grep mysqld.

Một điều quan trọng bạn học được ở đây là liệu MySQL có được cài đặt với Homebrew hay không - Brew lưu trữ các launchctltệp của nó ở một vị trí khác với nơi OSX đặt các dịch vụ "thông thường".

Trên hộp OSX của tôi, các plisttệp nằm trong ~/Library/LaunchAgents/Vì vậy tôi đã chạy:

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

để dừng máy chủ MySQL. Trước đây tôi đã xem /Library/LaunchDaemons//Library/LaunchAgentskhông tìm thấy một tập tin có mysqldtên của nó.

Bạn cũng có thể cài đặt một hệ thống dựa trên bia được gọi là services, để quản lý tất cả các ứng dụng dịch vụ được cài đặt của Bia, như được mô tả trong bài đăng này - http: // achots. Dùtbot.com / start-and-stopping-background-service-with- hebebrew I Mặc dù vậy, tôi đã không thử điều này, vì vậy, YMMV.


2
Đây là những gì cố định nó cho tôi. Luôn luôn là một nỗi đau khi bạn đang chiến đấu với nhiều cách khác nhau để chạy một ngăn xếp LAMP cục bộ.
Patrick

Tôi đã phải sử dụng đường dẫn Homebrew để xóa cái này, tức là/usr/local/opt/mysql/homebrew.mxcl.mysql.plist
micjamking

10

Tôi đã cố gắng để giết quá trình bằng cách gửi TERMtín hiệu, và điều đó đã làm việc. Lệnh là:

sudo kill -15 {PID}

8

Đối với tôi, điều này hoạt động một khi tôi tìm ra nhãn hiệu mà tôi đang tìm kiếm.

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

6

Dỡ bỏ dịch vụ và dừng daemon:

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

Tải dịch vụ và bắt đầu daemon:

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

Điều này làm việc cho tôi ngoại trừ đó là com.oracle.oss.mysql.mysqld.plist MySQL cục bộ của tôi đã được cài đặt từ tải xuống từ MySQL, không phải qua homebrew.
Jason

2

Quá trình bạn đang cố gắng để giết? Một số quy trình trong Mac OS X (ví dụ: Dock, một số quy trình hệ thống) sẽ tự động hồi sinh nếu chúng bị giết.


Tôi đang cố giết mysqldquá trình
Hristo

Có lẽ được quản lý bởi launchd, sau đó, sẽ khởi động lại nó nếu quá trình chết.
mipadi

1

Tôi đã giải quyết việc chỉnh sửa tệp /L Library / LaunchDaemons / com.mysql.mysql.plist, thay đổi thuộc tính true thành 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

Có một quá trình đang chạy trên máy của bạn đó là chặn mysql. Chạy

ps auxwww | grep mysql

sau đó làm

kill -15 {PID}

Quá trình của tôi đã chặn nó là _mysql

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.