[net/openntpd] pidfile support

Christian Weisgerber naddy at mips.inka.de
Mon Jun 2 14:36:13 UTC 2014


On 2014-06-02, Tomek Wałaszek <tmwalaszek at gmail.com> wrote:

>> Yes, the fix will work but it will be not a generic solution.
>> Maybe for those types of programs we should have a generic solution? For
>> example add a variable leader="YES", and if this variable will be set then
>> the rc script will kill only the 'master' process?
>> I wrote a simple patch for the rc.subr, I dont know whether this solution
>> is good but anyway it works for me :P
>> Patch is in the attachment :)

(Here's Tomek's patch that didn't make it to the mailing list.)

----------
diff --git a/rc.subr b/rc.subr
index 850bc03..668ea14 100644
--- a/rc.subr
+++ b/rc.subr
@@ -252,7 +252,7 @@ check_pidfile()
 		debug "pid file ($_pidfile): no pid in file."
 		return
 	fi
-	_find_processes $_procname $_interpreter '-p '"$_pid" ${_leader:-"NO"}
+	_find_processes $_procname ${_interpreter:-.} '-p '"$_pid"
 }
 
 #
@@ -265,12 +265,10 @@ check_process()
 {
 	_procname=$1
 	_interpreter=$2
-	_leader=$3
-
 	if [ -z "$_procname" ]; then
-		err 3 'USAGE: check_process procname [interpreter leader]'
+		err 3 'USAGE: check_process procname [interpreter]'
 	fi
-	_find_processes $_procname $_interpreter '-ax' $_leader
+	_find_processes $_procname ${_interpreter:-.} '-ax'
 }
 
 #
@@ -295,13 +293,12 @@ check_process()
 #
 _find_processes()
 {
-	if [ $# -ne 4 ]; then
+	if [ $# -ne 3 ]; then
 		err 3 'USAGE: _find_processes procname interpreter psargs'
 	fi
 	_procname=$1
 	_interpreter=$2
 	_psargs=$3
-	_leader=$4
 
 	_pref=
 	if [ $_interpreter != "." ]; then	# an interpreted script
@@ -341,22 +338,14 @@ _find_processes()
 		_fp_match='case "$_arg0" in
 		    $_procname|$_procnamebn|${_procnamebn}:|"(${_procnamebn})"|"[${_procnamebn}]")'
 	fi
-	
+
 	_proccheck="\
-		$PS 2>/dev/null -o pid= -o pgid= -o jid= -o command= $_psargs"' |
-		while read _npid _pgid _jid '"$_fp_args"'; do
+		$PS 2>/dev/null -o pid= -o jid= -o command= $_psargs"' |
+		while read _npid _jid '"$_fp_args"'; do
 			'"$_fp_match"'
-				if checkyesno _leader;
-				then 
-					if [ "$JID" -eq "$_jid" -a "$_npid" -eq "$_pgid"  ]; then
-						echo -n "$_pref$_npid";
-						_pref=" ";
-					fi
-				else
-					if [ "$JID" -eq "$_jid" ]; then
-						echo -n "$_pref$_npid";
-						_pref=" ";
-					fi
+				if [ "$JID" -eq "$_jid" ];
+				then echo -n "$_pref$_npid";
+				_pref=" ";
 				fi
 				;;
 			esac
@@ -670,15 +659,13 @@ run_rc_command()
 	rc_pid=
 	_pidcmd=
 	_procname=${procname:-${command}}
-	command_interpreter=${command_interpreter:-.}
-	_leader=${leader:-"NO"}
 
 					# setup pid check command
 	if [ -n "$_procname" ]; then
 		if [ -n "$pidfile" ]; then
 			_pidcmd='rc_pid=$(check_pidfile '"$pidfile $_procname $command_interpreter"')'
 		else
-			_pidcmd='rc_pid=$(check_process '"$_procname $command_interpreter $_leader"')'
+			_pidcmd='rc_pid=$(check_process '"$_procname $command_interpreter"')'
 		fi
 		if [ -n "$_pidcmd" ]; then
 			_keywords="${_keywords} status poll"

-- 
Christian "naddy" Weisgerber                          naddy at mips.inka.de


More information about the freebsd-ports mailing list