pseudo terminals

devi devi at
Thu Sep 17 22:19:17 UTC 2009


On Thu, 2009-09-17 at 08:09 +1000, Cameron Simpson wrote:
> On 16Sep2009 19:43, devi <devi at> wrote:
> | On Wed, 2009-09-16 at 11:18 +0100, Dave Mitchell wrote:
> | > On Wed, Sep 16, 2009 at 03:06:09PM -0400, devi wrote:
> | > > 	The command 
> | > > echo "service httpd status " > /dev/pts/1 is executed on one terminal,
> | > > let us assume it as t1.  
> | > > The echo command is executed on t1 but the output(service httpd status"
> | > > is directed to /dev/pts/1 terminal.
> | > > 
> | > > What I am saying is that the output  is redirected directly to the
> | > > terminal /dev/pts1/1.
> | > > The output here is "service httpd status", which is generally a command.
> | > > And so it gets executed.
> | > 
> | > No, the text just appears in the terminal associated with /dev/pts1/1;
> | > it does not not cause the command to be executed. That is to say,
> | > you can't use this as a mechanism to insert characters into a another
> | > terminal's input buffer.
> | > 
> | But the command got executed, and it gave the status of apache
> | on /dev/pts/1 terminal.
> That's quite interesting. It should _not_ cause the command to be
> executed, and I really believe something more is going on.
> /dev/pts/1 is the "slave" side of the pseudoterminal; all pseudoterminals
> have a "master" side and a "slave" side.

Here, the /dev/pts/1 is the tty of a virtual machine.  This virtual
machine is created by xen.
Yes, I have come across master and slave pseudo terminals, but I have
not set any anything like that.
> The slave side is the "normal" terminal side that programs are connected to.
> Writing to it causes text to the displayed, and reading from it consumes text
> that is typed.
> The master side is what terminal emulators like xterm use. Xterm is a
> GUI program that displays a terminal on your screen. When you type at
> the displayed GUI, xterm catches that and writes data to the _master_
> side of the pseudo terminal it obtained. That stuff appears as though
> typed to ordinary programs on the slave side. Conversely, data _read_ by
> xterm from the master side is the data _written_ to the slave side;
> xterm gathers that and updates the GUI, thus displaying the program
> output.
> See "man ptmx" for how a pseudo terminal is obtained under Linux.
> Anyway, because of this scheme nothing you write to /dev/pts/1, a slave
> device, should cause it to be _typed_ at that terminal.
> Can you confirm your setup in more detail?

There is no setup, I created the virtual machine, and then found its
tty. and executed the command from other terminal "t1" as specified

> I would imagine that you have two terminals open, with plain shells in
> them. Typing the command "tty" in each will tell you their names, and
> presumably one says "/dev/pts/1". The other is "t1".
> And you are really typing:
>   echo "service httpd status" >/dev/pts/1
> in the "t1" terminal, and on the /dev/pts/1 terminal you are not seeing the
> string "service httpd status" displayed as plain output; instead you are
> seeing the output of the command:
>   service httpd status
> Is that all correct?
> Can I suggest the following experiments?
> First, run the command "set -x" in the shell on /dev/pts/1. That will turn
> of execution tracing, and it should then be more obvious is that shell
> is really executing the command. Type some commands in that shell, like
> "date" or "uptime" to see the effect. Then do your echo statement from
> "t1" again.
> Secondly, on the "t1" terminal, run the command:
>   echo -n "service httpd status" >/dev/pts/1
> You should see it displayed on /dev/pts/1 but it won't run a command
> because we have not sent the end-of-line. If you're right, it will be
> as though typed, and you can go to the other terminal and edit the line
> and change it before pressing enter.

I have done, what you suggested, it's the same.  Anyways my requirement
is that, after the command is executed on /dev/pts/1, I should be able
to get the return value on the terminal "t1"

	rc=`echo "service httpd status" > /dev/pts/1"
I thought rc will hold the return value, but it displays nothing.

> Cheers,
> -- 
> Cameron Simpson <cs at> DoD#743
> It's a vague science.   - Rory Tate, circle researcher.

More information about the users mailing list