kill命令的简单实现
kill命令的简单实现
目标:简单实现kill命令
功能:
- 向进程发送信号
- 列出信号名字
参数:
- -l 列出信号名字
- -s (s=1、2、3.....)发送的信号代号
环境
ubuntu 14.04 gcc.real (Ubuntu 4.8.2-19ubuntu1) 4.8.2
代码
新手菜鸟 如有错误 欢迎指正
#include<stdio.h>
#include<signal.h>
#include<string.h>
#include<unistd.h>
#include<stdlib.h>
int sent_sig(int signum,char *pid);
void list_signum(char *optarg);
unsigned int chartonum(char *str);
int main(int argc,char **argv)
{
int opt;
int signum=0;
char optstring[]=":1,2,3,4,5,6,7,8,9,l:";
while((opt=getopt(argc,argv,optstring))!=-1)
switch(opt){
case '1': case '2': case '3':
case '4': case '5': case '6':
case '7': case '8': case '9':
signum=opt-'0';
break;
case 'l':
list_signum(optarg);
break;
case ':':
printf("-l need argument!\n");
exit(1);
case '?':
printf("unknow option!\n");
exit(1);
}
if(argc==1){
printf("no option!,no pid\n");
exit(1);
}
if(optind==argc){
if(kill(-1,signum)!=0){
printf("wrong in sent sig to all process!\n");
exit(1);
}
else
return 0;
}
for(;optind<argc;optind++){
if(!sent_sig(signum,argv[optind])){
printf("no such process\n");
exit(1);
}
}
return 0;
}
unsigned int chartonum(char *str)
{
char *s=str;
unsigned int pid=0;
while(*s){
pid=pid*10+(*s-'0');
s++;
}
return pid;
}
int sent_sig(int signum,char *str)
{
unsigned int pid=chartonum(str);
if(signum==0)
signum=9;
if(kill(pid,signum)!=0)
return 0;
else
return 1;
}
void list_signum(char *optarg)
{
char *str;
int signum=chartonum(optarg);
str=strsignal(signum);
printf("%s\n",str);
}
kill命令的简单实现的更多相关文章
- kill命令
*杀死进程最安全的方法是单纯使用kill命令,不加修饰符,不带标志. 首先使用ps -ef命令确定要杀死进程的PID,然后输入以下命令: # kill -pid 注释:标准的kill命令通 ...
- linux kill 命令【待完善】【转】
kill 命令用来处理进程, 在linux中即可使用kill -9 pid 杀死进程 , 也可使用kill -KILL pid 等价的命令来执行. HUP 1 终端断线 INT 2 中断(同 Ctrl ...
- linux命令总结kill命令详解
1.作用 kill命令用来中止一个进程. 2.格式 kill [ -s signal | -p ] [ -a ] pid ... kill -l [ signal ] 3.参数 -s:指定发送的信号. ...
- centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课
centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数 ...
- Linux下kill命令
首先了解什么是信号:信号是进程级的中断请求,系统定义了30余种信号,kill是管理员用来发送信号的一种手段. 功能说明:删除执行中的程序或工作. 语 法:kill [-s <信息名称或编号> ...
- PS命令和kill命令
名称:ps使用权限:所有使用者使用方式:ps [options] [--help]说明:显示瞬间行程 (process) 的动态参数:ps的参数非常多, 在此仅列出几个常用的参数并大略介绍含义-A ...
- [原]那些年整理的Linux常用命令,简单明了
查询相关 find 按规则查找某个文件或文件夹,包括子目录 find . -name '*.sh' -- 以.sh结尾的文件 find . -name '*channel*' -- 包含channel ...
- MariaDB kill命令
MariaDB的KILL命令不只可以杀掉连接,而且可以只杀掉某连接当前的SQL,而不断开连接.KILL QUERY thread_id;kill thread_id可以杀掉当前的连接,而kill QU ...
- 每天一个linux命令(42):kill命令
Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须 ...
随机推荐
- Keil MDK fromelf生成bin文件
找到Keil安装目录中fromelf.exe 配置Keil fromelf.exe --bin -o -\OBJ\LED.bin -\OBJ\LED.axf –bin:二进制文件 –i32:Intel ...
- 设置yum自动更新
[wang@brady ~]$ sudo yum -y install cronie yum-cron sudo vim /etc/yum/yum-cron.conf apply_updates = ...
- 修改Mysql 字符集,支持Emoji表情
插入失败 java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1 at ...
- EhLib使用全攻略
使用 TDBSumList 组件 还记得以前有朋友问过这样一个问题:在 DBGrid 下如何像 Excel 一样能够做统计计算,实话说,使用 DBGrid 来做的话着实不易,不过现在有了这个咚咚, ...
- Android笔记(四十八) Android中的资源访问——SDCard
访问存储在SD卡中的文件 使用 Environment.getExternalStorageState(); 判断是否存在内存卡 使用 Environment.getExternalStorageDi ...
- 剑指offer:从尾到头打印链表
题目 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 解题思路 在不改变链表结构的前提下,因为单向链表本身的结构是从头到尾的,现在用从尾到头遍历打印,可以联想到“先进后出”, 因此我 ...
- 检查SQL Server数据库各个库表空间使用的方法
/*创建一张表:表名Data,列名:表名,列数,预留空间,数据占用空间,索引占用空间,剩余空间*/ CREATE TABLE Data ( 表名 ), 列数 ), 预留空间 ), 数据占用空间 ), ...
- java 获取某年某月最后一天
Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, 2016); calendar.set(Calendar ...
- 什么是C/S和B/S架构?
C/S架构 C/S即:Client与Server ,中文意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的. 这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才 ...
- boost.tribool
tribool boost.tribool类似c++内建的bool类,但基于三态的布尔逻辑,在true和false之外还有一个indeterminate状态.一个例子场景是执行某项任务,在执行之前状态 ...