1. 首先了解获取指定进程名的PID:
bash中获取: ps -aux | grep xxx | grep -v grep | awk '{print $2}' // xxx 表示进程名
这里需要注意,使用ps -ef 或者ps aux , 存在grep 的输出,因为grep 命令也会启动bash,因此输出时,会看到grep 的进程,因为需要再次通过 grep -v 去除grep 的输出
2. c++ 中实现
#include <iostream>
#include <string>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
void DoCmdGetPid(const std::string& cmd, std::string& stringPid)
{
FILE *pFile = popen(cmd.c_str(), "r");
char *buff = new char[256];
memset(buff, 0, sizeof(buff));
fread(buff, 1, sizeof(buff), pFile);
stringPid = buff;
pclose(pFile);
delete[] buff;
}
void SendSig()
{
const std::string& procName = "recv";
std::string cmd = "ps -a | grep " + procName + " |grep -v grep | awk '{print $2}'";
std::string strPid;
DoCmdGetPid(cmd, strPid);
if (strPid.empty()) {
std::cout << "not process\n";
return;
}
// 通过kill 函数发送信号
kill(std::stoi(strPid), 38);
return;
}
int main()
{
while (1) {
SendSig();
sleep(5);
}
return 0;
}