Joh*_*est 4 c++ unix linux kill process
前段时间我需要编写c ++代码来杀死某些进程.在我的主程序中,我使用系统("...")运行大型CAE系统包,输入时使用不同的文件名字符串.CAE软件创建许多进程,包含进程名称字符串filename).一些CAE流程的工作时间 > MAX_TIME,比我更需要关闭它们:
//filename contains part of CAE-process name
    string s="/bin/kill -9 `ps aux | grep "+filename+" | awk {'print $2'}`";
    system(s.c_str());
输出是:
Usage:
  kill pid ...              Send SIGTERM to every process listed.
  kill signal pid ...       Send a signal to every process listed.
  kill -s signal pid ...    Send a signal to every process listed.
  kill -l                   List all signal names.
  kill -L                   List all signal names in a nice table.
  kill -l signal            Convert between signal numbers and names.
我尝试使用execvp运行,尝试不同的方式运行kill或pkill over bash脚本,调用system("name_of_script.sh"),其中包含脚本,kill -9 *filename*但结果是相同的.
使用kill并/bin/kill给出相同的输出bash -c kill....
使用kill我的系统(Ubuntu Natty)gnome-terminal:  
kill -9 `ps aux | grep filename | awk {'print $2'}`
关闭所有必要的流程!它有效.
在使用时pkill,我可以理解,我们需要完整的进程名称来杀死它,但我只有部分名称.
我还尝试使用pthreads将计算过程包装到子线程中并使用pthread_cancel将其停止,但由于CAE系统进程没有接收信号(我认为,捕获它们)它不起作用,唯一的方法是SIGTERM.
使用pthread_kill杀死子线程 - "换行"也会杀死父(我的主程序).
我不知道CAE进程pids 从 signals.h调用kill.
 
关闭主程序不停止CAE进程(并且没有-Z标志,所以它们不是我的程序进程子进程??)
如何关闭从主程序运行> MAXTIME的CAE进程?
问题是我在QtCreator中通过调试器(gdb)运行主程序.没有QtCreator shell脚本以正确的方式运行参数,尽管参数都是双向正确传递的.
此外,我必须清除一些CAE进程,这些进程在cmdline中没有文件名,但是这个进程的父项或子项.在shell脚本中,您可以使用:
cat /proc/"$P"/status | grep PPid | grep -o "[0-9]*"
哪里$P是一个带有杀死进程的pid的变量.
以下是几种杀死所有子进程的方法.
我会写smth.类似于C++,将扫描/proc/xxxx/status到PPid= ppid_of_my main_program并切断该分支.
Raf*_*sta 11
您不必打开shell来终止进程.只需使用"kill"功能:
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
http://linux.die.net/man/2/kill
要查找要杀死的进程,请阅读以下目录:
的/ proc/####/CMDLINE
其中####是任何正在运行的进程ID的编号.因此,代码大致是读取/ proc目录并列出所有数字目录,这些是当前正在运行的进程,并且您在该目录的"cmdline"文件中找到生成该进程的命令的名称.然后,您可以使用正则表达式或字符串比较来标识要杀死的进程.
| 归档时间: | 
 | 
| 查看次数: | 20322 次 | 
| 最近记录: |