summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorunknown <tim@black.box>2001-10-22 11:22:55 -0400
committerunknown <tim@black.box>2001-10-22 11:22:55 -0400
commit47d42a13f6f62548370e4188227a3f156faada31 (patch)
tree7b7a6f77e5224a9c4c182ab8930aae7de7fc3994 /scripts
parent8a015dc327bba65df40352501206e80e019e45ea (diff)
downloadmariadb-git-47d42a13f6f62548370e4188227a3f156faada31.tar.gz
Fix the NOHUP_NICENESS test in mysqld_safe.
scripts/mysqld_safe.sh: Fix the NOHUP_NICENESS test; previously it would break if the process already had a negative priority.
Diffstat (limited to 'scripts')
-rw-r--r--scripts/mysqld_safe.sh49
1 files changed, 41 insertions, 8 deletions
diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh
index c6df7400c75..5504d929ede 100644
--- a/scripts/mysqld_safe.sh
+++ b/scripts/mysqld_safe.sh
@@ -159,15 +159,48 @@ export MYSQL_TCP_PORT
NOHUP_NICENESS="nohup"
-if test -w /
+
+# Using nice with no args to get the niceness level is GNU-specific.
+# This check could be extended for other operating systems (e.g.,
+# BSD could use "nohup sh -c 'ps -o nice -p $$' | tail -1").
+# But, it also seems that GNU nohup is the only one which messes
+# with the priority, so this is okay.
+if nohup nice > /dev/null 2>&1
then
- NOHUP_NICENESS=`nohup nice 2>&1`
- if test $? -eq 0 && test x"$NOHUP_NICENESS" != x0 && nice --1 echo foo > /dev/null 2>&1
- then
- NOHUP_NICENESS="nice --$NOHUP_NICENESS nohup"
- else
- NOHUP_NICENESS="nohup"
- fi
+ normal_niceness=`nice`
+ nohup_niceness=`nohup nice`
+
+ numeric_nice_values=1
+ for val in $normal_niceness $nohup_niceness
+ do
+ case "$val" in
+ -[0-9] | -[0-9][0-9] | -[0-9][0-9][0-9] | \
+ [0-9] | [0-9][0-9] | [0-9][0-9][0-9] )
+ ;;
+ * )
+ numeric_nice_values=0 ;;
+ esac
+ done
+
+ if test $numeric_nice_values -eq 1
+ then
+ nice_value_diff=`expr $nohup_niceness - $normal_niceness`
+ if test $? -eq 0 && test $nice_value_diff -gt 0 && \
+ nice --$nice_value_diff echo testing > /dev/null 2>&1
+ then
+ # nohup increases the priority (bad), and we are permitted
+ # to lower the priority
+ NOHUP_NICENESS="nice --$nice_value_diff nohup"
+ fi
+ fi
+else
+ if nohup echo testing > /dev/null 2>&1
+ then
+ :
+ else
+ # nohup doesn't work on this system
+ NOHUP_NICENESS=""
+ fi
fi
USER_OPTION=""