⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbkill.cpp

📁 这是国外的resip协议栈
💻 CPP
字号:
/*- * See the file LICENSE for redistribution information. * * Copyright (c) 1999-2004 *	Sleepycat Software.  All rights reserved. * * $Id: dbkill.cpp,v 11.9 2004/01/28 03:35:52 bostic Exp $ *//* * Kill - * Simulate Unix kill on Windows/NT and Windows/9X. * This good enough to support the Berkeley DB test suite, * but may be missing some favorite features. * * Would have used MKS kill, but it didn't seem to work well * on Win/9X.  Cygnus kill works within the Gnu/Cygnus environment * (where processes are given small pids, with presumably a translation * table between small pids and actual process handles), but our test * environment, via Tcl, does not use the Cygnus environment. * * Compile this and install it as c:/tools/kill.exe (or as indicated * by build_win32/include.tcl ). */#include <windows.h>#include <stdio.h>#include <stdlib.h>#include <limits.h>/* * Like atol, with specified base.  Would use stdlib, but * strtol("0xFFFF1234", NULL, 16) returns 0x7FFFFFFF and * strtol("4294712487", NULL, 16) returns 0x7FFFFFFF w/ VC++ */longmyatol(char *s, int base){	long result = 0;	char ch;	int sign = 1;  /* + */	if (base == 0)		base = 10;	if (base != 10 && base != 16)		return LONG_MAX;	while ((ch = *s++) != '\0') {		if (ch == '-') {			sign = -sign;		}		else if (ch >= '0' && ch <= '9') {			result = result * base + (ch - '0');		}		else if (ch == 'x' || ch == 'X') {			/* Allow leading 0x..., and switch to base 16 */			base = 16;		}		else if (base == 16 && ch >= 'a' && ch <= 'f') {			result = result * base + (ch - 'a' + 10);		}		else if (base == 16 && ch >= 'A' && ch <= 'F') {			result = result * base + (ch - 'A' + 10);		}		else {			if (sign > 1)				return LONG_MAX;			else				return LONG_MIN;		}	}	return sign * result;}voidusage_exit(){	fprintf(stderr, "Usage: kill [ -sig ] pid\n");	fprintf(stderr, "       for win32, sig must be or 0, 15 (TERM)\n");	exit(EXIT_FAILURE);}intmain(int argc, char **argv){	HANDLE hProcess ;	DWORD accessflag;	long pid;	int sig = 15;	if (argc > 2) {		if (argv[1][0] != '-')			usage_exit();		if (strcmp(argv[1], "-TERM") == 0)			sig = 15;		else {			/* currently sig is more or less ignored,			 * we only care if it is zero or not			 */			sig = atoi(&argv[1][1]);			if (sig < 0)				usage_exit();		}		argc--;		argv++;	}	if (argc < 2)		usage_exit();	pid = myatol(argv[1], 10);	/*printf("pid = %ld (0x%lx) (command line %s)\n", pid, pid, argv[1]);*/	if (pid == LONG_MAX || pid == LONG_MIN)		usage_exit();	if (sig == 0)		accessflag = PROCESS_QUERY_INFORMATION | PROCESS_VM_READ;	else		accessflag = STANDARD_RIGHTS_REQUIRED | PROCESS_TERMINATE;	hProcess = OpenProcess(accessflag, FALSE, pid);	if (hProcess == NULL) {		fprintf(stderr, "dbkill: %s: no such process\n", argv[1]);		exit(EXIT_FAILURE);	}	if (sig == 0)		exit(EXIT_SUCCESS);	if (!TerminateProcess(hProcess, 99)) {		DWORD err = GetLastError();		fprintf(stderr,		    "dbkill: cannot kill process: error %d (0x%lx)\n", err, err);		exit(EXIT_FAILURE);	}	return EXIT_SUCCESS;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -