我必須編寫一個SNMP模塊來監視我寫過的某個服務器應用程序。問題是我必須知道這個應用程序是否正在運行,並且我應該可以在任何時候殺死它。如何獲得在某個端口上以編程方式偵聽的進程的pid?
我知道應用程序正在偵聽的端口(讀取應用程序配置文件),我可以嘗試將此端口綁定到套接字以知道它是否被我的應用程序使用,或者另一個足夠我的模塊。下面是代碼:
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>
,但我不知道如何以編程方式。有任何想法嗎??
爲什麼不看'netstat'的代碼? –
我做了一些__similar__。我已經使用了''strace'',並且我發現netstat打開了''/ proc/net/tcp'',但是我不知道如何從那裏獲得pid。 – chavaone