Changeset 2516 for neercs/trunk/src/grab.c
- Timestamp:
- Jul 2, 2008, 4:35:26 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
neercs/trunk/src/grab.c
r2512 r2516 39 39 #if defined HAVE_LINUX_KDEV_T_H 40 40 char fdstr[1024]; 41 struct mytrace * t;41 struct mytrace *parent, *child; 42 42 int i, fd = 0, mode, ret; 43 43 char to_open[3]; … … 46 46 debug("pty is %s", ptyname); 47 47 48 t = mytrace_attach(pid);49 if(! t)48 parent = mytrace_attach(pid); 49 if(!parent) 50 50 { 51 51 fprintf(stderr, "Cannot access process %ld\n", pid); 52 52 return -1; 53 53 } 54 55 child = mytrace_fork(parent); 56 pid = mytrace_getpid(child); 54 57 55 58 /* Look for file descriptors that are PTYs */ … … 75 78 debug("found pty %d", i); 76 79 77 ret = mytrace_close(t, i); 80 if(i == 2) 81 { 82 mytrace_write(parent, i, "\x1b]0;\x07", 5); 83 mytrace_write(parent, i, "\x1b[1000l", 7); 84 mytrace_write(parent, i, "\x1b[?12l\x1b[?25h", 12); 85 mytrace_write(parent, i, "\n[Process stolen by neercs]\n", 28); 86 } 87 88 ret = mytrace_close(child, i); 78 89 if(ret < 0) 79 90 { … … 86 97 debug("Running setsid on process %ld (sid=%d)", pid, getsid(pid)); 87 98 88 ret = mytrace_setpgid( t, 0, getsid(pid));99 ret = mytrace_setpgid(child, 0, getsid(pid)); 89 100 if(ret < 0) 90 101 { 91 102 fprintf(stderr, "syscall setpgid failed\n"); 92 mytrace_detach( t);103 mytrace_detach(child); 93 104 return -1; 94 105 } … … 97 108 { 98 109 fprintf(stderr, "setpgid returned %d\n", ret); 99 mytrace_detach( t);110 mytrace_detach(child); 100 111 return -1; 101 112 } 102 113 103 ret = mytrace_setsid( t);114 ret = mytrace_setsid(child); 104 115 if(ret < 0) 105 116 { 106 117 fprintf(stderr, "syscall setsid failed\n"); 107 mytrace_detach( t);118 mytrace_detach(child); 108 119 return -1; 109 120 } 110 121 111 122 debug("pid %ld has now sid %d", pid, getsid(pid)); 123 124 mytrace_exit(parent, 0); 125 mytrace_detach(parent); 112 126 113 127 /* Reopen PTY file descriptors */ … … 116 130 if(!to_open[i]) 117 131 continue; 118 fd = mytrace_open( t, ptyname, mode);132 fd = mytrace_open(child, ptyname, mode); 119 133 if(fd < 0) 120 134 { 121 135 perror("mytrace_open"); 122 136 } 123 ret = mytrace_dup2( t, fd, i);137 ret = mytrace_dup2(child, fd, i); 124 138 if(ret < 0) 125 139 { … … 129 143 130 144 kill(pid, SIGWINCH); 131 132 mytrace_detach(t); 145 mytrace_detach(child); 133 146 134 147 return 0;
Note: See TracChangeset
for help on using the changeset viewer.