You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
496 B
30 lines
496 B
3 years ago
|
void
|
||
|
newterm(const Arg* a)
|
||
|
{
|
||
|
int res;
|
||
|
switch (fork()) {
|
||
|
case -1:
|
||
|
die("fork failed: %s\n", strerror(errno));
|
||
|
break;
|
||
|
case 0:
|
||
|
switch (fork()) {
|
||
|
case -1:
|
||
|
die("fork failed: %s\n", strerror(errno));
|
||
|
break;
|
||
|
case 0:
|
||
|
res = chdir(getcwd_by_pid(pid));
|
||
|
execlp("st", "./st", NULL);
|
||
|
break;
|
||
|
default:
|
||
|
exit(0);
|
||
|
}
|
||
|
default:
|
||
|
wait(NULL);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static char *getcwd_by_pid(pid_t pid) {
|
||
|
char buf[32];
|
||
|
snprintf(buf, sizeof buf, "/proc/%d/cwd", pid);
|
||
|
return realpath(buf, NULL);
|
||
|
}
|