There is a difference between pseudoterminals and pipes in linux. It is possible to detect this, as described in this answer - https://stackoverflow.com/a/1312957/1709408
It is possible to obtain handle of a new pty, as written here - Declarations of p/invoke for file io and pseudo terminal and explained there - http://docs.oracle.com/cd/E19253-01/816-4855/termsub15-14/index.html
It is IMPOSSIBLE to pass the handle to Process.Start, because it always create pipe itself - https://github.com/mono/mono/blob/0806ff5baf5140ccc3525c85ff661313b4c9bcef/mcs/class/System/System.Diagnostics/Process.cs#L1051
So, how to create a new process in mono and pass pty to it ?