私も書いた特定のサーバーアプリケーションを監視する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>
、プログラムで行う方法がわかりません。何か案は??