How do I attach a terminal process that was not started from the UI?

I am looking at the TerminalService and I am wondering how I can attach a terminal to a process that was not started from the UI. I saw that start() only takes a terminalId but I can’t see a way to attach to a running process. In our case we want to start a process when the container is started, and then when the UI (Theia) loads, we would like to attach to that process. Is this possible?

[original thread by Dominic E.]

Hi, i think the process has to be started via Theia, otherwise Theia does not have a chance listen to process streams.

I don’t know Node.js api allowing attachment to an existing process.

[captainwasabi]

if you start the process in tmux you can always attach to the tmux session

[Dominic E.]

Ah yea, that’s a good idea using tmux for this. Thanks for the tip.

You can start processes on Theia start up before a client connects using @theia/process package, i.e. use IShellTerminalServer to create a terminal process and ProcessManager to access it. You can also add an http endpoint to start a new terminal process on a request. When a client connects it can fetch a terminal id and attach to it.

1 Like

[Dominic E.]

Great ideas Anton! Thanks for your input. I will have a look at all of them.

Hello @akosyakov, how can i get the instance of ‘IShellTernimalServer’ in the backend?
I try to inject it,

image

but it fails by the error:

And i use ‘ShellTerminalServerProxy’,

image

it goes wrong too,

@PeimingMo1 have you tried injecting the ShellTerminalServer (node):

It is bound this way:

Yes, it works, thank you.

1 Like