我必须编写一个 SNMP 模块来监视我也编写的某个服务器应用程序。问题是我必须知道这个应用程序是否正在运行,并且我应该能够尽可能地杀死它。
我知道应用程序正在侦听的端口(读取应用程序配置文件),我可以尝试将此端口绑定到套接字,以了解我的应用程序或其他应用程序是否正在(或未)使用它对于我的模块。这是代码:
int
get_server_status()
{
struct sockaddr_in local;
int port,sockfd;
if (parse_config_file(&port,NULL,CONFIG_FILE_PATH) == -1)
return -1; //Error
if ((sockfd = socket ( AF_INET, SOCK_STREAM, 0 )) < 0)
return -1; //Error
local.sin_family = AF_INET;
local.sin_port = htons ( port );
local.sin_addr.s_addr = inet_addr ("127.0.0.1");
if (bind(sockfd, (struct sockaddr *) &local, sizeof (local) ) < 0 ){
if(errno == EADDRINUSE)
return 1; //Port being used
else
return -1; //Error
}else{
close(sockfd);
return 0; //Port not being used
}
}
当我需要杀死应用程序时,问题就来了,我既不知道它PID
也不知道如何获取它。我可以使用netstat -tln <port>
,但我不知道如何以编程方式进行。有任何想法吗??