newterm.c - st - [fork] simple terminal
(HTM) git clone https://git.drkhsh.at/st.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
newterm.c (482B)
---
1 extern char* argv0;
2
3 static char*
4 getcwd_by_pid(pid_t pid) {
5 static char cwd[32];
6 snprintf(cwd, sizeof cwd, "/proc/%d/cwd", pid);
7 return cwd;
8 }
9
10 void
11 newterm(const Arg* a)
12 {
13 switch (fork()) {
14 case -1:
15 die("fork failed: %s\n", strerror(errno));
16 break;
17 case 0:
18 switch (fork()) {
19 case -1:
20 die("fork failed: %s\n", strerror(errno));
21 break;
22 case 0:
23 chdir(getcwd_by_pid(pid));
24
25 execl("/proc/self/exe", argv0, NULL);
26 exit(1);
27 default:
28 exit(0);
29 }
30 }
31 }