亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? skill.c

?? linux下獲取一些環境信息的代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Copyright 1998-2002 by Albert Cahalan; all rights resered. * This file may be used subject to the terms and conditions of the * GNU Library General Public License Version 2, or any later version * at your option, as published by the Free Software Foundation. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. */#include <fcntl.h>#include <pwd.h>#include <dirent.h>#include <errno.h>#include <signal.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/resource.h>#include <sys/stat.h>#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include "proc/pwcache.h"#include "proc/sig.h"#include "proc/devname.h"#include "proc/procps.h"  /* char *user_from_uid(uid_t uid) */#include "proc/version.h" /* procps_version */static int f_flag, i_flag, v_flag, w_flag, n_flag;static int tty_count, uid_count, cmd_count, pid_count;static int *ttys;static uid_t *uids;static const char **cmds;static int *pids;#define ENLIST(thing,addme) do{ \if(!thing##s) thing##s = malloc(sizeof(*thing##s)*saved_argc); \if(!thing##s) fprintf(stderr,"No memory.\n"),exit(2); \thing##s[thing##_count++] = addme; \}while(0)static int my_pid;static int saved_argc;static int sig_or_pri;static int program;#define PROG_GARBAGE 0  /* keep this 0 */#define PROG_KILL  1#define PROG_SKILL 2/* #define PROG_NICE  3 */ /* easy, but the old one isn't broken */#define PROG_SNICE 4/********************************************************************/static void display_kill_version(void){  switch(program) {    case PROG_KILL:      fprintf(stdout, "kill (%s)\n",procps_version);      return;    case PROG_SKILL:      fprintf(stdout, "skill (%s)\n",procps_version);      return;    case PROG_SNICE:      fprintf(stdout, "snice (%s)\n",procps_version);      return;    default:      fprintf(stdout, "unknown (%s)\n",procps_version);      return;  }}/***** kill or nice a process */static void hurt_proc(int tty, int uid, int pid, const char *restrict const cmd){  int failed;  int saved_errno;  char dn_buf[1000];  dev_to_tty(dn_buf, 999, tty, pid, ABBREV_DEV);  if(i_flag){    char buf[8];    fprintf(stderr, "%-8s %-8s %5d %-16.16s   ? ",      (char*)dn_buf,user_from_uid(uid),pid,cmd    );    if(!fgets(buf,7,stdin)){      printf("\n");      exit(0);    }    if(*buf!='y' && *buf!='Y') return;  }  /* do the actual work */  if(program==PROG_SKILL) failed=kill(pid,sig_or_pri);  else                    failed=setpriority(PRIO_PROCESS,pid,sig_or_pri);  saved_errno = errno;  if(w_flag && failed){    fprintf(stderr, "%-8s %-8s %5d %-16.16s   ",      (char*)dn_buf,user_from_uid(uid),pid,cmd    );    errno = saved_errno;    perror("");    return;  }  if(i_flag) return;  if(v_flag){    printf("%-8s %-8s %5d %-16.16s\n",      (char*)dn_buf,user_from_uid(uid),pid,cmd    );    return;  }  if(n_flag){   printf("%d\n",pid);   return;  }}/***** check one process */static void check_proc(int pid){  char buf[128];  struct stat statbuf;  char *tmp;  int tty;  int fd;  int i;  if(pid==my_pid) return;  sprintf(buf, "/proc/%d/stat", pid); /* pid (cmd) state ppid pgrp session tty */  fd = open(buf,O_RDONLY);  if(fd==-1){  /* process exited maybe */    if(pids && w_flag) printf("WARNING: process %d could not be found.",pid);    return;  }  fstat(fd, &statbuf);  if(uids){  /* check the EUID */    i=uid_count;    while(i--) if(uids[i]==statbuf.st_uid) break;    if(i==-1) goto closure;  }  read(fd,buf,128);  buf[127] = '\0';  tmp = strrchr(buf, ')');  *tmp++ = '\0';  i = 5; while(i--) while(*tmp++!=' '); /* scan to find tty */  tty = atoi(tmp);  if(ttys){    i=tty_count;    while(i--) if(ttys[i]==tty) break;    if(i==-1) goto closure;  }  tmp = strchr(buf, '(') + 1;  if(cmds){    i=cmd_count;    /* fast comparison trick -- useful? */    while(i--) if(cmds[i][0]==*tmp && !strcmp(cmds[i],tmp)) break;    if(i==-1) goto closure;  }  /* This is where we kill/nice something. *//*  fprintf(stderr, "PID %d, UID %d, TTY %d,%d, COMM %s\n",    pid, statbuf.st_uid, tty>>8, tty&0xf, tmp  );*/  hurt_proc(tty, statbuf.st_uid, pid, tmp);closure:  close(fd); /* kill/nice _first_ to avoid PID reuse */}/***** debug function */#if 0static void show_lists(void){  int i;  fprintf(stderr, "%d TTY: ", tty_count);  if(ttys){    i=tty_count;    while(i--){      fprintf(stderr, "%d,%d%c", (ttys[i]>>8)&0xff, ttys[i]&0xff, i?' ':'\n');    }  }else fprintf(stderr, "\n");    fprintf(stderr, "%d UID: ", uid_count);  if(uids){    i=uid_count;    while(i--) fprintf(stderr, "%d%c", uids[i], i?' ':'\n');  }else fprintf(stderr, "\n");    fprintf(stderr, "%d PID: ", pid_count);  if(pids){    i=pid_count;    while(i--) fprintf(stderr, "%d%c", pids[i], i?' ':'\n');  }else fprintf(stderr, "\n");    fprintf(stderr, "%d CMD: ", cmd_count);  if(cmds){    i=cmd_count;    while(i--) fprintf(stderr, "%s%c", cmds[i], i?' ':'\n');  }else fprintf(stderr, "\n");}#endif/***** iterate over all PIDs */static void iterate(void){  int pid;  DIR *d;  struct dirent *de;  if(pids){    pid = pid_count;    while(pid--) check_proc(pids[pid]);    return;  }#if 0  /* could setuid() and kill -1 to have the kernel wipe out a user */  if(!ttys && !cmds && !pids && !i_flag){  }#endif  d = opendir("/proc");  if(!d){    perror("/proc");    exit(1);  }  while(( de = readdir(d) )){    if(de->d_name[0] > '9') continue;    if(de->d_name[0] < '1') continue;    pid = atoi(de->d_name);    if(pid) check_proc(pid);  }  closedir (d);}/***** kill help */static void kill_usage(void) NORETURN;static void kill_usage(void){  fprintf(stderr,    "Usage:\n"    "  kill pid ...              Send SIGTERM to every process listed.\n"    "  kill signal pid ...       Send a signal to every process listed.\n"    "  kill -s signal pid ...    Send a signal to every process listed.\n"    "  kill -l                   List all signal names.\n"    "  kill -L                   List all signal names in a nice table.\n"    "  kill -l signal            Convert between signal numbers and names.\n"  );  exit(1);}/***** kill */static void kill_main(int argc, const char *restrict const *restrict argv) NORETURN;static void kill_main(int argc, const char *restrict const *restrict argv){  const char *sigptr;  int signo = SIGTERM;  int exitvalue = 0;  if(argc<2) kill_usage();  if(!strcmp(argv[1],"-V")|| !strcmp(argv[1],"--version")){    display_kill_version();    exit(0);  }  if(argv[1][0]!='-'){    argv++;    argc--;    goto no_more_args;  }  /* The -l option prints out signal names. */  if(argv[1][1]=='l' && argv[1][2]=='\0'){    if(argc==2){      unix_print_signals();      exit(0);    }    /* at this point, argc must be 3 or more */    if(argc>128 || argv[2][0] == '-') kill_usage();    exit(print_given_signals(argc-2, argv+2, 80));  }  /* The -L option prints out signal names in a nice table. */  if(argv[1][1]=='L' && argv[1][2]=='\0'){    if(argc==2){      pretty_print_signals();      exit(0);    }    kill_usage();  }  if(argv[1][1]=='-' && argv[1][2]=='\0'){    argv+=2;    argc-=2;    goto no_more_args;  }  if(argv[1][1]=='-') kill_usage(); /* likely --help */  // FIXME: "kill -sWINCH $$" not handled

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产一区二区三区久久久蜜月 | 在线亚洲免费视频| 精品福利一区二区三区| 亚洲妇熟xx妇色黄| 麻豆国产精品官网| 4438x成人网最大色成网站| 亚洲一区二区三区四区五区中文| 国产黄色成人av| 日本一区二区高清| 99久久综合99久久综合网站| 国产欧美一区视频| 大白屁股一区二区视频| 欧美激情一区二区三区全黄| 成人蜜臀av电影| 亚洲激情综合网| 91麻豆精品国产自产在线| 日本少妇一区二区| 久久网这里都是精品| 成人黄色大片在线观看| 国产精品久久久久天堂| 欧美性色黄大片| 国内成人自拍视频| 亚洲欧洲色图综合| 91精品国产综合久久精品app | 成人av影院在线| 亚洲国产日韩在线一区模特 | 欧美日韩一区二区三区不卡| 久久精品国产亚洲aⅴ| 国产精品国产三级国产有无不卡| 欧美无砖专区一中文字| 国产毛片精品一区| 天天射综合影视| 国产欧美日韩在线观看| 欧美精品免费视频| 成人av网址在线观看| 美女任你摸久久| 亚洲午夜激情av| 国产精品免费看片| 欧美电影免费观看完整版| 欧美在线观看一二区| 成人在线一区二区三区| 蜜臀久久久久久久| 婷婷国产在线综合| 综合久久久久久| 国产亚洲1区2区3区| 欧美成人一区二区三区片免费 | 在线免费亚洲电影| 成av人片一区二区| 国产成人在线网站| 国产九色sp调教91| 精品亚洲成a人| 蜜臀久久久久久久| 秋霞午夜av一区二区三区| 亚洲第一久久影院| 五月天中文字幕一区二区| 亚洲精品国产高清久久伦理二区| 久久综合九色综合97婷婷| 久久这里只有精品视频网| 久久久久久久性| 26uuuu精品一区二区| 久久综合久久鬼色中文字| 337p日本欧洲亚洲大胆色噜噜| 日韩欧美国产综合一区| 久久综合九色综合欧美亚洲| 久久女同精品一区二区| 成人免费小视频| 亚洲综合一区二区三区| 亚洲美女屁股眼交| 日韩中文字幕91| 国产成人精品免费| 欧美综合一区二区| 日韩精品一区二区三区视频在线观看 | 国产片一区二区三区| 亚洲日穴在线视频| 青草av.久久免费一区| 成人一级片在线观看| 欧美日韩在线直播| 久久一区二区三区国产精品| 国产精品麻豆视频| 午夜婷婷国产麻豆精品| 精品一区二区免费| 韩国v欧美v日本v亚洲v| 国产69精品久久久久777| 欧美日韩一级片网站| 久久久久久免费网| 青青国产91久久久久久| 色妞www精品视频| 日本一区二区免费在线| 全国精品久久少妇| 欧美人妖巨大在线| 艳妇臀荡乳欲伦亚洲一区| 成人午夜碰碰视频| 久久久夜色精品亚洲| 另类综合日韩欧美亚洲| 欧美在线不卡视频| 亚洲男人的天堂网| 99re这里只有精品6| 国产日韩av一区| 国产99久久久国产精品免费看| 欧美一区日韩一区| 日韩亚洲电影在线| av成人老司机| 久久精品在线观看| 国产成人亚洲综合a∨婷婷| 精品福利二区三区| 国产69精品久久99不卡| 国产精品女同互慰在线看| 成人av网在线| 亚洲另类在线制服丝袜| 欧美日韩一区成人| 日本一不卡视频| xvideos.蜜桃一区二区| 国产精品一卡二卡| 亚洲精品日日夜夜| 91精品国产91久久综合桃花| 国产酒店精品激情| 亚洲精品老司机| 欧美色图免费看| 国产一区二区三区综合| 国产精品福利在线播放| 欧美日韩不卡在线| 国产福利一区二区三区视频| 亚洲免费av在线| 日韩精品综合一本久道在线视频| 国产91精品露脸国语对白| 亚洲国产一区二区在线播放| 久久综合九色综合97婷婷女人| 成人av在线资源网站| 午夜久久久久久| 亚洲精品水蜜桃| 国产网站一区二区| 欧美系列日韩一区| 不卡在线观看av| 激情综合色播激情啊| 天涯成人国产亚洲精品一区av| 久久久久国产精品人| 日韩一区二区三区在线| 99国产欧美另类久久久精品| 精品在线一区二区| 日本女优在线视频一区二区| 亚洲欧美欧美一区二区三区| 国产欧美久久久精品影院| 日韩一区二区在线看| 欧美一区二区三区四区五区 | 国产精品久久久久9999吃药| 欧美成人a视频| 精品国产自在久精品国产| 欧美成人精品3d动漫h| 欧美一级免费观看| 91精品国产91综合久久蜜臀| 欧美酷刑日本凌虐凌虐| 91精品国产欧美一区二区18| 在线成人免费观看| 精品日产卡一卡二卡麻豆| 日韩一区二区精品葵司在线| 欧美美女一区二区| 久久一留热品黄| 久久久久久电影| 国产欧美精品一区aⅴ影院| 久久久91精品国产一区二区精品| 亚洲国产精品国自产拍av| 中文字幕日韩精品一区| 亚洲va欧美va国产va天堂影院| 午夜精品久久久久久久久| 精品一区二区三区免费毛片爱| 国产精品综合久久| 欧美在线视频全部完| 日韩三级在线免费观看| 国产精品水嫩水嫩| 日本欧美一区二区三区乱码| 国产一区二区三区在线观看精品 | 另类调教123区 | 欧美精品丝袜久久久中文字幕| 欧美精品一区二| 天堂精品中文字幕在线| 国产麻豆精品theporn| 日本黄色一区二区| 国产亚洲综合av| 午夜欧美视频在线观看| 风间由美一区二区av101| 欧美成人欧美edvon| 香蕉久久一区二区不卡无毒影院| 国产成人一区二区精品非洲| 欧美一区二区在线看| 亚洲综合在线电影| 国产很黄免费观看久久| 精品美女在线播放| 男女性色大片免费观看一区二区 | 欧美三级电影网站| 成人免费在线视频| 99久久免费国产| 中文在线一区二区| 顶级嫩模精品视频在线看| 精品国产乱码久久久久久闺蜜| 日韩在线观看一区二区| 欧美日韩成人综合| 捆绑调教一区二区三区| 91精品国产一区二区人妖| 免费在线一区观看| 欧美日韩第一区日日骚|