diff -Naur a/lib/lib.c b/lib/lib.c
--- a/lib/lib.c	2014-09-18 06:51:44.000000000 +0530
+++ b/lib/lib.c	2014-09-18 16:05:35.116169399 +0530
@@ -668,7 +668,7 @@
     if (!strncasecmp(pidstr, "sig", 3)) pidstr+=3;
   }
   for (i = 0; i < sizeof(signames)/sizeof(struct signame); i++)
-    if (!pidstr) xputs(signames[i].name);
+    if (!pidstr) xprintf("%02d) %s\n", signames[i].num, signames[i].name);
     else if (!strcasecmp(pidstr, signames[i].name)) return signames[i].num;
 
   return -1;
diff -Naur a/toys/posix/kill.c b/toys/posix/kill.c
--- a/toys/posix/kill.c	2014-09-18 06:51:44.000000000 +0530
+++ b/toys/posix/kill.c	2014-09-18 16:04:43.571162532 +0530
@@ -63,11 +63,15 @@
   // list signal(s)
   if (toys.optflags & FLAG_l) {
     if (*args) {
-      int signum = sig_to_num(*args);
-      char *s = NULL;
-
-      if (signum>=0) s = num_to_sig(signum&127);
-      puts(s ? s : "UNKNOWN");
+      for (; *args; args++) {
+        int signum = sig_to_num(*args);
+        char *s = NULL;
+
+        if (signum >= 0)
+          s = num_to_sig(signum&127);
+        s ? (isdigit(**args) ? puts(s) : printf("%d\n", signum))
+          : error_msg("UNKNOWN signal '%s'", *args);
+      }
     } else sig_to_num(NULL);
     return;
   }
