diff options
author | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
---|---|---|
committer | Taru Karttunen <taruti@taruti.net> | 2011-03-30 15:46:40 +0300 |
commit | e5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch) | |
tree | d8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/cmd/snap/snap.c |
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/cmd/snap/snap.c')
-rwxr-xr-x | sys/src/cmd/snap/snap.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/sys/src/cmd/snap/snap.c b/sys/src/cmd/snap/snap.c new file mode 100755 index 000000000..16912be34 --- /dev/null +++ b/sys/src/cmd/snap/snap.c @@ -0,0 +1,65 @@ +#include <u.h> +#include <libc.h> +#include <bio.h> +#include "snap.h" + +void +usage(void) +{ + fprint(2, "usage: %s [-o snapfile] pid...\n", argv0); + exits("usage"); +} + +void +main(int argc, char **argv) +{ + char *user, *sys, *arch, *term, *ofile; + int i; + long pid, me; + Biobuf *b; + Dir *d; + Proc *p; + + ofile = "/fd/1"; + ARGBEGIN{ + case 'o': + ofile = ARGF(); + break; + default: + usage(); + }ARGEND; + + if(argc < 1) + usage(); + + /* get kernel compilation time */ + if((d = dirstat("#/")) == nil) { + fprint(2, "cannot stat #/ ???\n"); + exits("stat"); + } + + if((b = Bopen(ofile, OWRITE)) == nil) { + fprint(2, "cannot write to \"%s\"\n", ofile); + exits("Bopen"); + } + + if((user = getuser()) == nil) + user = "gre"; + if((sys = sysname()) == nil) + sys = "gnot"; + if((arch = getenv("cputype")) == nil) + arch = "unknown"; + if((term = getenv("terminal")) == nil) + term = "unknown terminal type"; + + Bprint(b, "process snapshot %ld %s@%s %s %ld \"%s\"\n", + time(0), user, sys, arch, d->mtime, term); + me = getpid(); + for(i=0; i<argc; i++) { + if((pid = atol(argv[i])) == me) + fprint(2, "warning: will not snapshot self\n"); + else if(p = snap(pid, 1)) + writesnap(b, p); + } + exits(0); +} |