Re: pseudo terminals

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 16Sep2009 19:43, devi <devi@xxxxxxxxxxx> 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.

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?

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.

Cheers,
-- 
Cameron Simpson <cs@xxxxxxxxxx> DoD#743
http://www.cskk.ezoshosting.com/cs/

It's a vague science.   - Rory Tate, circle researcher.

-- 
fedora-list mailing list
fedora-list@xxxxxxxxxx
To unsubscribe: https://www.redhat.com/mailman/listinfo/fedora-list
Guidelines: http://fedoraproject.org/wiki/Communicate/MailingListGuidelines

[Index of Archives]     [Current Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]     [Fedora Docs]

  Powered by Linux