Fix handling of MTP fork/child process

Change-Id: Iacd8a38d21e9c8b0dfafefbeb646f46cd3ba02a1
diff --git a/mtp/twrpMtp.cpp b/mtp/twrpMtp.cpp
index e7c3f2c..9a7df5b 100755
--- a/mtp/twrpMtp.cpp
+++ b/mtp/twrpMtp.cpp
@@ -99,6 +99,8 @@
 	if (pid == 0) {
 		// Child process
 		start();
+		MTPD("MTP child process exited.\n");
+		_exit(0);
 	} else {
 		return pid;
 	}
diff --git a/partitionmanager.cpp b/partitionmanager.cpp
index bc27ccb..d83518b 100644
--- a/partitionmanager.cpp
+++ b/partitionmanager.cpp
@@ -29,6 +29,7 @@
 #include <fcntl.h>
 #include <iostream>
 #include <iomanip>
+#include <sys/wait.h>
 #include "variables.h"
 #include "twcommon.h"
 #include "partitions.hpp"
@@ -2212,8 +2213,12 @@
 	TWFunc::write_file("/sys/class/android_usb/android0/idVendor", vendorstr);
 	TWFunc::write_file("/sys/class/android_usb/android0/idProduct", productstr);
 	if (mtppid) {
-		kill(mtppid, SIGTERM);
+		LOGINFO("Disabling MTP\n");
+		int status;
+		kill(mtppid, SIGKILL);
 		mtppid = 0;
+		// We don't care about the exit value, but this prevents a zombie process
+		waitpid(mtppid, &status, 0);
 	}
 	property_set("sys.usb.config", "adb");
 	DataManager::SetValue("tw_mtp_enabled", 0);