2011-05-27 69 views
0

從我能理解的情況來看,在Mac OS X上,守護進程是在後臺運行的東西(與Windows服務相同)。我可以通過說用Java編寫的dameon被認爲是JVM來建立守護進程之間的連接嗎?我讀了一些人們提到的關於守護線程和jvm線程的地方,他們是如何相關的?Mac OS X - 守護進程和jvm之間的關係

+0

JVM或Java虛擬機是處理Java程序執行的運行時。因此,除非您使用Java編寫JVM,否則您的程序不能成爲JVM,這很不尋常。 – 2011-05-27 20:53:48

+3

@Charlie Martin:守護進程和JVM在維基百科上可用。 http://en.wikipedia.org/wiki/Daemon_(computing),http://en.wikipedia.org/wiki/Jvm。很高興知道@tom是否閱讀過這些內容。我會很高興他們可以提出更多**具體**問題,包括來自文章中的實際引用,顯示任何混淆或困難的來源。 – 2011-05-27 21:00:34

+4

@Charlie Martin:當你不清楚提問者所知道,不知道,已閱讀並且沒有閱讀時,回答並不快。當然,可以猜測或假設並寫出一個無用的答案。這似乎並不快。 – 2011-05-27 21:06:57

回答

1

編號JVM - Java虛擬機 - 是運行您的Java程序的可執行文件。 A 守護進程是沒有連接到特定終端而運行的任何程序,例如,哦,launchd。

所以考慮在命令行中運行Java程序:jar文件是myapp.jar你鍵入

$ java -jar myapp.jar 

這在路徑/usr/bin/java,這只是一個普通的程序啓動一個可執行程序。它恰好是一個包含java指令的解釋器,「java 虛擬機」的解釋器。它運行並模擬那個特殊的抽象Java機器,並運行直到Java程序的所有正常線程都終止。然後它返回一個返回碼並結束。由於該java進程是由shell啓動的,因此它是shell的子程序,並且shell返回它已完成的通知。

現在,可以編寫一個程序,例如用C語言創建一個不屬於shell的進程;其父進程變爲進程ID爲1的進程,在大多數UNIX系統上稱爲init(1),或在Mac OS/X上啓動。由PID 1擁有的進程中運行,直到它或者通過shutdown命令停止,或者自行終止(或崩潰。)

這些過程稱爲守護進程在希臘神話中的更比人類精神後。他們被稱爲是因爲(a)這是一個可愛的名字; (b)與常規用戶程序相比,它們具有「超自然力量」;和(c)以前的黑客喜歡可愛的名字。

+0

謝謝查理!我有一個Java程序,我想在後臺運行它(如Windows服務),並在系統啓動時自動啓動,它可以在Mac OS X上運行嗎? 守護程序基本上是一個自動啓動並在後臺運行的程序。這是否意味着我的java程序本質上是一個守護進程? – tom 2011-05-27 21:13:34

+0

你打賭,湯姆。閱讀「man 1 launchd」和「man 1 launchctl」 - 你基本上可以要求launchd將程序作爲守護進程運行。另一種方法是從命令行運行並「取消」它:'$ java -jar myapp.jar&disown'。 – 2011-05-27 21:23:35

+0

順便說一下,OS/X啓動的方法比舊式方式要容易一些,需要'/ etc/inittab'中的相當神祕的配置文件。 – 2011-05-27 21:27:03