- (let ((id (if (eshell-processp (car args))
- (process-id (car args))
- (car args))))
- (when id
- (cond
- ((null id)
- (error "kill: bad signal spec"))
- ((and (numberp id) (= id 0))
- (error "kill: bad signal spec `%d'" id))
- ((and (stringp id)
- (string-match "^-?[0-9]+$" id))
- (setq signum (abs (string-to-number id))))
- ((stringp id)
- (let (case-fold-search)
- (if (string-match "^-\\([A-Z]+[12]?\\)$" id)
- (setq signum
- (intern (concat "SIG" (match-string 1 id))))
- (error "kill: bad signal spec `%s'" id))))
- ((< id 0)
- (setq signum (abs id)))
- (t
- (signal-process id signum)))))
- (setq args (cdr args)))
- nil))
+ (let ((arg (if (eshell-processp (car args))
+ (process-id (car args))
+ (car args))))
+ (when arg
+ (cond
+ ((null arg)
+ (error "kill: null pid. Process may actually be a network connection."))
+ ((not (numberp arg))
+ (error "kill: invalid argument type: %s" (type-of arg)))
+ ((and (numberp arg)
+ (<= arg 0))
+ (error "kill: bad pid: %d" arg))
+ (t
+ (signal-process arg signum)))))
+ (setq args (cdr args))))
+ nil)