Преглед изворни кода

Fix for Servers Not Stopping Correctly https://opengamepanel.org/forum/viewthread.php?thread_id=6805

own3mall пре 7 година
родитељ
комит
3bf2aabc3c
1 измењених фајлова са 11 додато и 4 уклоњено
  1. 11 4
      OGP/ogp_agent.pl

+ 11 - 4
OGP/ogp_agent.pl

@@ -1084,9 +1084,16 @@ sub stop_server_without_decrypt
 	}
 		
 	my $screen_id = create_screen_id(SCREEN_TYPE_HOME, $home_id);
-	my $get_screen_pid = "screen -list | grep $screen_id | cut -f1 -d'.' | sed '".'s/\W//g'."'";
-	my $screen_pid = `$get_screen_pid`; 
+	my $get_screen_pid = "screen -list | grep $screen_id | cut -f1 -d'.' | sed '".'s/\W//g'."' | head -1";
+	my $screen_pid = `$get_screen_pid`;	 
+	
 	chomp $screen_pid;
+	
+	my $windows_pid_command = "ps -W | grep '" . $screen_pid . "' | head -1 | awk '{print \$4}'";
+	my $windows_pid = `$windows_pid_command`;
+	
+	chomp $windows_pid;
+	
 	# Some validation checks for the variables.
 	if ($server_ip =~ /^\s*$/ || $server_port < 0 || $server_port > 65535)
 	{
@@ -1147,7 +1154,7 @@ sub stop_server_without_decrypt
 	{
 		logger "Control protocol not supported. Using kill signal to stop the server.";
 		my $screen_id = create_screen_id(SCREEN_TYPE_HOME, $home_id);
-		system("cmd /C taskkill /f /fi 'PID eq $screen_pid' /T");
+		system("cmd /C taskkill /f /fi 'PID eq $windows_pid' /T");
 		system('screen -wipe > /dev/null 2>&1');
 	}
 		
@@ -1176,7 +1183,7 @@ sub stop_server_without_decrypt
 	if (is_screen_running_without_decrypt(SCREEN_TYPE_HOME, $home_id) == 1)
 	{
 		logger "Control protocol not responding. Using kill signal.";
-		system("cmd /C taskkill /f /fi 'PID eq $screen_pid' /T");
+		system("cmd /C taskkill /f /fi 'PID eq $windows_pid' /T");
 		system('screen -wipe > /dev/null 2>&1');
 		logger "Server ID $home_id:Stopped server running on $server_ip:$server_port.";
 		return 0;