Corrected minor typo.
[website_subgeniuskitty.com] / data / notes / unix_misc.md
index 5b8b3a8..9e799ed 100644 (file)
@@ -49,3 +49,94 @@ to a `(gdb)` prompt. Exit `gdb`.
 
 The characters have now been received by `vi` and a file should be waiting at
 `/tmp/vi_recover.txt`.
 
 The characters have now been received by `vi` and a file should be waiting at
 `/tmp/vi_recover.txt`.
+
+
+# Expose Process STDIO on TCP Port #
+
+This note explains how to launch a process and connect its
+`stdin`/`stdout`/`stderr` directly to a TCP port. It was tested on FreeBSD 12.
+
+As an example, we will launch a `bash` process running on a Debian 10 machine
+and connect it to TCP port `4242`. Then, from a FreeBSD machine we will connect
+and utilize the `bash` session remotely.
+
+First, on the Debian machine, we use
+[`socat`](http://www.dest-unreach.org/socat/), a program which establishes two
+bidirectional byte streams and transfers data between them. In our case, we
+tell `socat` to build a PTY at `/tmp/pty_test` and connect it to TCP port
+`4242`.
+
+    socat PTY,link=/tmp/pty_test,raw TCP-LISTEN:4242,reuseaddr,fork
+
+Note that the `PTY` argument to `socat` must precede the `TCP-LISTEN` argument.
+Despite the bidirectional nature, the endpoint definition order is not
+interchangeable.
+
+Now we use `setsid` to start a new `bash` process and attach it to the PTY at
+`/tmp/pty_test`. Note that we collapse `stdout` and `stderr` into a single
+combined stream.
+
+    setsid sh -c 'exec bash --login <> /tmp/pty_test >&0 2>&1'
+
+Replace `bash --login` with whatever other command you desire to execute. 
+
+Now, from the FreeBSD machine, connect the remote TCP port to your local STDIO
+with `socat`. Assuming the Debian machine running `bash` is at `192.168.1.107`,
+execute the following command.
+
+    socat STDIO,raw TCP:192.168.1.107:4242
+
+At this point you have a fully interative `bash` session running on the Debian
+machine, controlled from the FreeBSD machine. 
+
+
+# Determine PID of X11 Window #
+
+This note explains how to determine the Process ID (PID) corresponding to a
+program running in an X11 window, even if the program has locked up.
+
+I occasionally find myself needing to kill an X11 program like my terminal
+emulator (`st`) after it locks up, only to be greeted by a list of almost
+indistinguishable processes.
+
+    % ps aux | grep st
+    ataylor  6358    0.0  0.0   19292    6848  -  Is   18Jan21        0:00.22 st
+    ataylor 13449    0.0  0.0   18824    6752  -  Is   11Nov20        0:12.00 st
+    ataylor 15194    0.0  0.0   19208    7416  -  Is    4Aug20        6:22.17 st
+    ataylor 17303    0.0  0.0   19380    7492  -  Is   16Feb21        0:08.18 st
+    ataylor 24875    0.0  0.0   18812    8212  -  Is   24Feb21        0:05.34 st
+    ataylor 25313    0.0  0.0   19388    6928  -  Is   21Sep20        0:04.07 st
+    ataylor 26013    0.0  0.0   18348    6364  -  Is   29Jun20        0:27.78 st
+    ataylor 26677    0.0  0.0   20756    9152  -  Is   20Dec20        0:00.86 st
+    ataylor 27383    0.0  0.0   19152    8552  -  Is   Fri17          0:00.96 st
+    ataylor 28440    0.0  0.0   18916    5100  -  Is   14Mar20        0:24.59 st
+    ataylor 28491    0.0  0.0   18320    8528  -  Is   18:22          0:03.22 st
+    ataylor 31469    0.0  0.0   19280    7000  -  Is   13Feb21        0:10.73 st
+    ataylor 35707    0.0  0.0   19152    9100  -  Ss   23:45          0:00.08 st
+    ataylor 39426    0.0  0.0   20980    7900  -  Is   14Mar20        3:11.24 st
+    ataylor 42211    0.0  0.0   18980    9080  -  Is   17:33          0:02.43 st
+    ataylor 50065    0.0  0.0   19000    6800  -  Is    3Jan21        0:00.80 st
+    ataylor 50765    0.0  0.0   18764    6364  -  Is    9Jan21        0:05.97 st
+    ataylor 50780    0.0  0.0   18896    6656  -  Is   28Oct20        0:01.38 st
+    ataylor 53637    0.0  0.0   20568    8636  -  Is   26Dec20        0:16.79 st
+    ataylor 68757    0.0  0.0   19836    8912  -  Is   24Jan21        0:00.56 st
+    ataylor 69466    0.0  0.0   18980    9012  -  Is   Sun04          0:01.42 st
+    ataylor 72775    0.0  0.0   19260    7236  -  Is    7Jan21        0:01.10 st
+    ataylor 73530    0.0  0.0   18764    6912  -  Is    4Nov20        0:17.34 st
+    ataylor 73701    0.0  0.0   21040    9120  -  Is   20Nov20        0:18.44 st
+    ataylor 75901    0.0  0.0   18456    7640  -  Is    8Feb21        0:28.57 st
+    ataylor 80220    0.0  0.0   18884    6756  -  Is   25Dec20        0:04.87 st
+    ataylor 81521    0.0  0.0   18496    8652  -  Is   01:04          0:12.21 st
+    ataylor 83818    0.0  0.0   18956    5072  -  Is   10Apr20        0:09.37 st
+    ataylor 89395    0.0  0.0   18920    4984  -  Is   15Apr20        0:11.99 st
+
+Use `xprop` to obtain the PID from the window's various X11-related properties.
+First, run the command `xprop _NET_WM_PID`. It will appear to hang, but your
+mouse cursor will change to crosshairs. Place the crosshairs over the X11
+window in question and click. This tells `xprop` which window you are
+interested in and `xprop` then tells you the PID. For example, if I click on
+one of the `st` windows from the previous example, we see that it is PID 75901.
+
+    % xprop _NET_WM_PID
+    _NET_WM_PID(CARDINAL) = 75901
+