Как перезапустить (или сбросить) запущенный процесс в Linux

Если вы просто хотите получить представление об использовании процессов с момента работы, то с помощью top вы можете настроить сортировку по TIME + с помощью SHIFT + T . Вы также можете выделить этот столбец с помощью x .

Пример:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ 

COMMAND                                    
 4046 fred      20   0 1873812 825068 119016 S   0.7 20.4  31:52.12 firefox                                    
 2661 root      20   0  401200  97064  52196 S   5.0  2.4  15:07.41 Xorg                                       
 4058 fred      20   0  438056  25568  19388 S   1.0  0.6   1:30.85 panel-29-weathe                            
 4057 fred      20   0  307456  17904  15628 S   0.7  0.4   0:43.47 panel-21-system                            
 3957 fred      20   0  176732  23596  17536 S   0.3  0.6   0:38.32 xfwm4                                      
 4096 fred       9 -11  436876  14204   8936 S   0.0  0.4   0:37.12 pulseaudio                                 
 5052 root      20   0       0      0      0 S   0.3  0.0   0:28.04 kworker/2:2
5
06.06.2015, 15:32
1 ответ

Если у вас есть PID программы, вы можете использовать «Kill PID», чтобы завершить приложение. Я попытался сохранить полный экземпляр приложения перед закрытием, но этот процесс очень утомителен. Вы можете просто использовать терминал для запуска приложения. Например, если вы хотите запустить Firefox, просто введите терминал, чтобы открыть ваше приложение. Но если вы хотите перезапустить свой скрипт C++. Это можно сделать, просто передав команду в оболочку.

Я сделал функцию для выполнения команды в оболочке:

string ExecCmd(string command) {
  char buffer[128];
  string cmd_out = "";

  // open pipe to file and execute command in linux terminal
  FILE* pipe = popen(command.c_str(), "r");
  if (!pipe)
    return "popen failed!";

  // read till end of process:
  while (!feof(pipe)) {
    // read output of the sent command and add to result
    if (fgets(buffer, 128, pipe) != NULL)
      cmd_out += buffer;
  }
  pclose(pipe);
  // returns the output of terminal in string format
  return cmd_out;
}

Затем для завершения процесса и его перезапуска я использовал:

void RestartApplication(string proc_id) {
  // kill the running process
  ExecCmd("kill " + proc_id);

  // restart the application by giving the name of your program
  ExecCmd("nohup program_name >program_name.log &");
}

Я использовал команду nohup, потому что она освобождает терминал после выполнения команды. Теперь, чтобы запустить этот скрипт, вы можете написать в своем основном потоке программы:

void main(){
 RestartApplication(PID); // pass PID of your application to be restarted
}
0
16.04.2020, 07:57

Теги

Похожие вопросы