C言語システムコール-kill
killシステムコール
概要
killは指定プロセスに対して任意のシグナルを送信します。
プロセスグループを対象とすることで、グループ内の複数プロセスに対してシグナルを送信することが可能です。
システムのシグナル一覧を表示する場合には「man signal」コマンドを実行します。
killで使用頻度の高いシグナルとして以下のものがあります。
SIGINT | 割り込み |
SIGKILL | 強制終了 |
SIGTERM | 終了 |
SIGHUP | ハングアップ |
SIGQUIT | 中止 |
サンプルプログラム
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <signal.h>
/*!
* @brief プロセスを終了させる
* @param[in] pid プロセスID
* @return 0:success/-1:failure
*/
static int
terminate_process(pid_t pid)
{
int rc = 0;
rc = kill(pid, SIGTERM);
if(rc < 0){
printf("Error: kill() %s: (pid=%d)\n", strerror(errno), pid);
return(-1);
}
return(0);
}
/*!
* @brief 文字列をPIDに変換する
* @param[in] str 文字列
* @return PID 整数値
* @return -1 error
*/
static pid_t
str_to_pid(char *str)
{
int i = 0;
int pid = 0;
/* 数字であることを確認する */
for(i = 0; str[i]; i++){
if((str[i] < '0') || (str[i] > '9')){
fprintf(stderr, "Error: Invalid number=%s\n", str);
return(-1);
}
}
pid = atoi(str);
/* PIDの有効値を確認する */
if((pid > 99999) || (pid < 0)){
fprintf(stderr, "Error: Invalid pid=%d\n", pid);
return(-1);
}
return((pid_t)pid);
}
int
main(int argc, char *argv[])
{
int rc = 0;
pid_t pid = 0;
if(argc != 2){
fprintf(stderr, "Usage: %s <pid>\n", argv[0]);
exit(EXIT_FAILURE);
}
pid = str_to_pid(argv[1]);
if(pid < 0) exit(EXIT_FAILURE);
rc = terminate_process(pid);
if(rc != 0) exit(EXIT_FAILURE);
exit(EXIT_SUCCESS);
}
関連ページ
- C言語
- C言語システムコール
- C言語システムコール-chdir
- C言語システムコール-chroot
- C言語システムコール-fork
- C言語システムコール-execve
- C言語システムコール-wait
- C言語システムコール-getpid
- C言語システムコール-getpriority / C言語システムコール-setpriority
- C言語システムコール-getpgid / C言語システムコール-setpgid
- C言語システムコール-getuid / C言語システムコール-setuid
- C言語システムコール-getsid / C言語システムコール-setsid
- C言語システムコール-getgroups / C言語システムコール-setgroups
- C言語システムコール-getrusage
- C言語システムコール-getrlimit / C言語システムコール-setrlimit
- C言語システムコール-nanosleep
- C言語システムコール-kill
- C言語システムコール-sigaction
- C言語システムコール-sigsuspend
- C言語システムコール-signal
- C言語システムコール-getitimer
- C言語システムコール