aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWarren Dukes <warren.dukes@gmail.com>2005-03-09 03:40:02 +0000
committerWarren Dukes <warren.dukes@gmail.com>2005-03-09 03:40:02 +0000
commit5f8bf2b4bbf5440be42344917289326db40583a5 (patch)
tree3a90f5f59be6ac21f5af3611ebf61e904af3d94e
parent70463a1dacd83c18314a3b8d4d3053c00c7b107c (diff)
downloadmpd-5f8bf2b4bbf5440be42344917289326db40583a5.tar.gz
mpd-5f8bf2b4bbf5440be42344917289326db40583a5.tar.xz
mpd-5f8bf2b4bbf5440be42344917289326db40583a5.zip
add ability to forcefully kill pid listed in pid file with '-kill -kill'
git-svn-id: https://svn.musicpd.org/mpd/trunk@3045 09075e82-0dd4-0310-85a5-a0d7c8717e4f
-rw-r--r--src/main.c43
1 files changed, 27 insertions, 16 deletions
diff --git a/src/main.c b/src/main.c
index 626bf36a2..d59eed57d 100644
--- a/src/main.c
+++ b/src/main.c
@@ -112,7 +112,7 @@ void parseOptions(int argc, char ** argv, Options * options) {
exit(EXIT_SUCCESS);
}
else if(strcmp(argv[i],"--kill")==0) {
- options->kill = 1;
+ options->kill++;
argcLeft--;
}
else if(strcmp(argv[i],"--no-daemon")==0) {
@@ -384,7 +384,7 @@ void cleanUpPidFile() {
unlink(pidFileParam->value);
}
-void killMpdFromPidFile(char * cmd) {
+void killMpdFromPidFile(char * cmd, int killOption) {
struct stat st_cmd;
struct stat st_exe;
ConfigParam * pidFileParam = parseConfigFilePath(CONF_PID_FILE, 1);
@@ -408,23 +408,34 @@ void killMpdFromPidFile(char * cmd) {
memset(buf, 0, 32);
snprintf(buf, 31, "/proc/%i/exe", pid);
- if(stat(cmd, &st_cmd)) {
- ERROR("unable to stat file \"%s\"\n", cmd);
- exit(EXIT_FAILURE);
- }
- if(stat(buf, &st_exe)) {
- ERROR("unable to kill proccess %i (%s: %s)\n", pid, buf,
- strerror(errno));
- exit(EXIT_FAILURE);
+ if(killOption == 1) {
+ if(stat(cmd, &st_cmd)) {
+ ERROR("unable to stat file \"%s\"\n", cmd);
+ ERROR("execute \"%s --kill -kill\" to kill pid %i\n",
+ cmd, pid);
+ exit(EXIT_FAILURE);
+ }
+ if(stat(buf, &st_exe)) {
+ ERROR("unable to kill proccess %i (%s: %s)\n", pid, buf,
+ strerror(errno));
+ ERROR("execute \"%s --kill -kill\" to kill pid %i\n",
+ cmd, pid);
+ exit(EXIT_FAILURE);
+ }
+
+ if(st_exe.st_dev != st_cmd.st_dev || st_exe.st_ino != st_cmd.st_ino) {
+ ERROR("%s doesn't appear to be running as pid %i\n",
+ cmd, pid);
+ ERROR("execute \"%s --kill -kill\" to kill pid %i\n",
+ cmd, pid);
+ exit(EXIT_FAILURE);
+ }
}
- if(st_exe.st_dev != st_cmd.st_dev || st_exe.st_ino != st_cmd.st_ino) {
- ERROR("%s doesn't appear to be running as pid %i\n",
- cmd, pid);
+ if(kill(pid, SIGTERM)) {
+ ERROR("unable to kill proccess %i: %s\n", pid, strerror(errno));
exit(EXIT_FAILURE);
}
-
- kill(pid, SIGTERM);
exit(EXIT_SUCCESS);
}
@@ -439,7 +450,7 @@ int main(int argc, char * argv[]) {
parseOptions(argc, argv, &options);
- if(options.kill) killMpdFromPidFile(argv[0]);
+ if(options.kill) killMpdFromPidFile(argv[0], options.kill);
initStats();
initTagConfig();