signal(SIGCHLD, SIG_DFL);
pid = Efork();
- if (pid==0) {
+ if (pid>0) {
int status;
int res;
while ((res=wait4(pid, &status, 0,0))==-1 &&
perror("vkill: execl()");
exit(1);
}
+#endif
-static int
-kill_wrapper(xid_t xid, char const *pid, int sig)
+inline static int
+kill_wrapper(xid_t xid, char const *pid_s, int sig)
{
- //printf("kill_wrapper(%u, %s, %i)\n", xid, pid, sig);
- if (vc_ctx_kill(xid,atoi(pid),sig)==-1) {
+ pid_t pid;
+ long tmp;
+
+ if (!isNumber(pid_s, &tmp, true)) {
+ WRITE_MSG(2, "vkill: '");
+ WRITE_STR(2, pid_s);
+ WRITE_MSG(2, "' is not a number\n");
+ }
+ pid = (pid_t) tmp;
+
+ if (xid==VC_NOCTX)
+ xid = vc_get_task_xid(pid);
+ if (vc_ctx_kill(xid,pid,sig)==-1) {
+#if defined(VC_ENABLE_API_LEGACY)
int err = errno;
if (vc_get_version(VC_CAT_COMPAT)==-1)
- return kill_wrapper_legacy(xid, pid, sig);
+ return kill_wrapper_legacy(xid, pid_s, sig);
else {
errno = err;
+#else
+ {
+#endif
perror("vkill: vc_ctx_kill()");
return 1;
}
}
-
return 0;
}
-#else // VC_ENABLE_API_LEGACY
-inline static int
-kill_wrapper(xid_t xid, char const *pid, int sig)
-{
- if (vc_ctx_kill(xid,atoi(pid),sig)==-1) {
- perror("vkill: vc_ctx_kill()");
- return 1;
- }
- return 0;
-}
-#endif
int main(int argc, char *argv[])
default :
WRITE_MSG(2, "Try '");
WRITE_STR(2, argv[0]);
- WRITE_MSG(2, " --help\" for more information.\n");
+ WRITE_MSG(2, " --help' for more information.\n");
return EXIT_FAILURE;
break;
}