public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Fork and Exec a process within the kernel
@ 2004-08-09 21:03 Eric Masson
  2004-08-09 23:10 ` Paul Jackson
  0 siblings, 1 reply; 13+ messages in thread
From: Eric Masson @ 2004-08-09 21:03 UTC (permalink / raw)
  To: linux-kernel

Hi all,

I know it's not the best approach to the problem I'm attempting to 
solve, but I'm attempting to fork a thread and exec a process from 
inside the kernel.   I tried creating a kernel thread and attempted to 
exec from there.  I actually make it into my child thread, but the exec 
doesn't appear to do anything.  Any ideas how to do this.

Eric

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Fork and Exec a process within the kernel
  2004-08-09 21:03 Fork and Exec a process within the kernel Eric Masson
@ 2004-08-09 23:10 ` Paul Jackson
  2004-08-10 15:22   ` Eric Masson
  0 siblings, 1 reply; 13+ messages in thread
From: Paul Jackson @ 2004-08-09 23:10 UTC (permalink / raw)
  To: Eric Masson; +Cc: linux-kernel

Try grep'ing for call_usermodehelper()

-- 
                          I won't rest till it's the best ...
                          Programmer, Linux Scalability
                          Paul Jackson <pj@sgi.com> 1.650.933.1373

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Fork and Exec a process within the kernel
  2004-08-09 23:10 ` Paul Jackson
@ 2004-08-10 15:22   ` Eric Masson
  2004-08-10 16:21     ` Paul Jackson
  2004-08-10 16:33     ` Jan-Benedict Glaw
  0 siblings, 2 replies; 13+ messages in thread
From: Eric Masson @ 2004-08-10 15:22 UTC (permalink / raw)
  To: Paul Jackson; +Cc: linux-kernel

Thanks for the pointer! My user mode program is running. Any idea how to 
control which console it shows up on?

Eric

Paul Jackson wrote:

>Try grep'ing for call_usermodehelper()
>
>  
>


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Fork and Exec a process within the kernel
  2004-08-10 15:22   ` Eric Masson
@ 2004-08-10 16:21     ` Paul Jackson
  2004-08-10 18:20       ` Lee Revell
  2004-08-10 19:03       ` Richard B. Johnson
  2004-08-10 16:33     ` Jan-Benedict Glaw
  1 sibling, 2 replies; 13+ messages in thread
From: Paul Jackson @ 2004-08-10 16:21 UTC (permalink / raw)
  To: Eric Masson; +Cc: linux-kernel

> My user mode program is running.

Good.

> Any idea how to control which console it shows up on?

No clue.

-- 
                          I won't rest till it's the best ...
                          Programmer, Linux Scalability
                          Paul Jackson <pj@sgi.com> 1.650.933.1373

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Fork and Exec a process within the kernel
  2004-08-10 15:22   ` Eric Masson
  2004-08-10 16:21     ` Paul Jackson
@ 2004-08-10 16:33     ` Jan-Benedict Glaw
  1 sibling, 0 replies; 13+ messages in thread
From: Jan-Benedict Glaw @ 2004-08-10 16:33 UTC (permalink / raw)
  To: Eric Masson; +Cc: Paul Jackson, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 764 bytes --]

On Tue, 2004-08-10 11:22:10 -0400, Eric Masson <cool_kid@future-ericsoft.com>
wrote in message <4118E822.3000303@future-ericsoft.com>:
> Thanks for the pointer! My user mode program is running. Any idea how to 
> control which console it shows up on?

The best idea for a usermode helper is to first close
stdin/stdout/stderr and re-open it with /dev/null...

If you need to communicate, write into some logfile.

MfG, JBG

-- 
Jan-Benedict Glaw       jbglaw@lug-owl.de    . +49-172-7608481             _ O _
"Eine Freie Meinung in  einem Freien Kopf    | Gegen Zensur | Gegen Krieg  _ _ O
 fuer einen Freien Staat voll Freier Bürger" | im Internet! |   im Irak!   O O O
ret = do_actions((curr | FREE_SPEECH) & ~(NEW_COPYRIGHT_LAW | DRM | TCPA));

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Fork and Exec a process within the kernel
  2004-08-10 16:21     ` Paul Jackson
@ 2004-08-10 18:20       ` Lee Revell
  2004-08-10 19:03       ` Richard B. Johnson
  1 sibling, 0 replies; 13+ messages in thread
From: Lee Revell @ 2004-08-10 18:20 UTC (permalink / raw)
  To: Paul Jackson; +Cc: Eric Masson, linux-kernel

On Tue, 2004-08-10 at 12:21, Paul Jackson wrote:
> > My user mode program is running.
> 
> Good.
> 
> > Any idea how to control which console it shows up on?
> 
> No clue.

OK, ignore the peanut gallery, this is the real answer:

./foo > /dev/tty1

See /etc/syslog.conf on Debian for another example.  Anywhere you could
write to a file you can write to /dev/tty$FOO and it will do the right
thing.

UNIX is full of stuff like this.  Pretty cool, huh?

Lee




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Fork and Exec a process within the kernel
  2004-08-10 16:21     ` Paul Jackson
  2004-08-10 18:20       ` Lee Revell
@ 2004-08-10 19:03       ` Richard B. Johnson
  2004-08-11  9:51         ` Erik Mouw
  1 sibling, 1 reply; 13+ messages in thread
From: Richard B. Johnson @ 2004-08-10 19:03 UTC (permalink / raw)
  To: Paul Jackson; +Cc: Eric Masson, linux-kernel

On Tue, 10 Aug 2004, Paul Jackson wrote:

> > My user mode program is running.
>
> Good.
>
> > Any idea how to control which console it shows up on?
>
> No clue.
>
> --


/dev/console is a symlink to /dev/tty0.

Alt-F1 = /dev/tty0
Alt-F2 = /dev/tty1
Alt-F3 = /dev/tty2

... etc.

    struct termios term;

    tcgetattr(0, &term);	// Get old terminal characteristics
    (void)close(0);		// Close old terminal(s)
    (void)close(1);
    (void)close(2);
    fd = open("/dev/console", O_RDWR);
    tcsetattr(fd, &term);	// Restore characteristics
    dup2(fd, 0);
    dup2(fd, 1);
    dup2(fd, 2);

Cheers,
Dick Johnson
Penguin : Linux version 2.4.26 on an i686 machine (5570.56 BogoMips).
            Note 96.31% of all statistics are fiction.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Fork and Exec a process within the kernel
  2004-08-10 19:03       ` Richard B. Johnson
@ 2004-08-11  9:51         ` Erik Mouw
  2004-08-11 11:24           ` Richard B. Johnson
  0 siblings, 1 reply; 13+ messages in thread
From: Erik Mouw @ 2004-08-11  9:51 UTC (permalink / raw)
  To: Richard B. Johnson; +Cc: Paul Jackson, Eric Masson, linux-kernel

On Tue, Aug 10, 2004 at 03:03:08PM -0400, Richard B. Johnson wrote:
> /dev/console is a symlink to /dev/tty0.

Please don't mislead newbies, Richard. /dev/console is NOT a link to
/dev/tty0, it's a completely different device:

erik@abra2:~ >ls -l /dev/console 
crw-------    1 root     tty        5,   1 Apr  7 09:13 /dev/console
erik@abra2:~ >ls -l /dev/tty0
crw-------    1 root     tty        4,   0 Feb 10  2000 /dev/tty0

On x86 desktop systems console output usually comes on the virtual
terminals, but you can also use serial console. My embedded StrongARM
board only has serial console.

>     struct termios term;
> 
>     tcgetattr(0, &term);	// Get old terminal characteristics
>     (void)close(0);		// Close old terminal(s)
>     (void)close(1);
>     (void)close(2);
>     fd = open("/dev/console", O_RDWR);

And what happens when you have console on a device that's not a serial
port like a line printer?


Erik

-- 
+-- Erik Mouw -- www.harddisk-recovery.com -- +31 70 370 12 90 --
| Lab address: Delftechpark 26, 2628 XH, Delft, The Netherlands

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Fork and Exec a process within the kernel
  2004-08-11  9:51         ` Erik Mouw
@ 2004-08-11 11:24           ` Richard B. Johnson
  2004-08-11 11:41             ` Erik Mouw
  0 siblings, 1 reply; 13+ messages in thread
From: Richard B. Johnson @ 2004-08-11 11:24 UTC (permalink / raw)
  To: Erik Mouw; +Cc: Paul Jackson, Eric Masson, linux-kernel

On Wed, 11 Aug 2004, Erik Mouw wrote:

> On Tue, Aug 10, 2004 at 03:03:08PM -0400, Richard B. Johnson wrote:
> > /dev/console is a symlink to /dev/tty0.
>
> Please don't mislead newbies, Richard. /dev/console is NOT a link to
> /dev/tty0, it's a completely different device:
>
> erik@abra2:~ >ls -l /dev/console
> crw-------    1 root     tty        5,   1 Apr  7 09:13 /dev/console
> erik@abra2:~ >ls -l /dev/tty0
> crw-------    1 root     tty        4,   0 Feb 10  2000 /dev/tty0
>

Bullshit. I know how to use `file`.

Script started on Wed Aug 11 07:21:39 2004
# file /dev/console
/dev/console: symbolic link to /dev/tty0
# exit
Script done on Wed Aug 11 07:21:51 2004


> On x86 desktop systems console output usually comes on the virtual
> terminals, but you can also use serial console. My embedded StrongARM
> board only has serial console.
>

Then that's your problem.


> >     struct termios term;
> >
> >     tcgetattr(0, &term);	// Get old terminal characteristics
> >     (void)close(0);		// Close old terminal(s)
> >     (void)close(1);
> >     (void)close(2);
> >     fd = open("/dev/console", O_RDWR);
>
> And what happens when you have console on a device that's not a serial
> port like a line printer?
>
>
> Erik
>

It will still work but there is no input and it can't be turned
into a "controlling terminal".


Cheers,
Dick Johnson
Penguin : Linux version 2.4.26 on an i686 machine (5570.56 BogoMips).
            Note 96.31% of all statistics are fiction.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Fork and Exec a process within the kernel
  2004-08-11 11:24           ` Richard B. Johnson
@ 2004-08-11 11:41             ` Erik Mouw
  2004-08-11 11:55               ` Richard B. Johnson
  0 siblings, 1 reply; 13+ messages in thread
From: Erik Mouw @ 2004-08-11 11:41 UTC (permalink / raw)
  To: Richard B. Johnson; +Cc: Paul Jackson, Eric Masson, linux-kernel

On Wed, Aug 11, 2004 at 07:24:42AM -0400, Richard B. Johnson wrote:
> On Wed, 11 Aug 2004, Erik Mouw wrote:
> > Please don't mislead newbies, Richard. /dev/console is NOT a link to
> > /dev/tty0, it's a completely different device:
> >
> > erik@abra2:~ >ls -l /dev/console
> > crw-------    1 root     tty        5,   1 Apr  7 09:13 /dev/console
> > erik@abra2:~ >ls -l /dev/tty0
> > crw-------    1 root     tty        4,   0 Feb 10  2000 /dev/tty0
> >
> 
> Bullshit. I know how to use `file`.
> 
> Script started on Wed Aug 11 07:21:39 2004
> # file /dev/console
> /dev/console: symbolic link to /dev/tty0

It might be a symlink on your machine, but that doesn't mean it's the
right way. For almost 7 years, /dev/console is a separate device, not a
symlink. Here's the relevant section from Documentation/devices.txt:

  The console device, /dev/console, is the device to which system
  messages should be sent, and on which logins should be permitted in
  single-user mode.  Starting with Linux 2.1.71, /dev/console is managed
  by the kernel; for previous versions it should be a symbolic link to
  either /dev/tty0, a specific virtual console such as /dev/tty1, or to
  a serial port primary (tty*, not cu*) device, depending on the
  configuration of the system.

Linux-2.1.71 was released on December 4, 1997. In your signature you
claim to run linux-2.4.26. Please update your system.


Erik

-- 
+-- Erik Mouw -- www.harddisk-recovery.com -- +31 70 370 12 90 --
| Lab address: Delftechpark 26, 2628 XH, Delft, The Netherlands

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Fork and Exec a process within the kernel
  2004-08-11 11:41             ` Erik Mouw
@ 2004-08-11 11:55               ` Richard B. Johnson
  2004-08-11 12:51                 ` Erik Mouw
  2004-08-11 15:24                 ` Alan Cox
  0 siblings, 2 replies; 13+ messages in thread
From: Richard B. Johnson @ 2004-08-11 11:55 UTC (permalink / raw)
  To: Erik Mouw; +Cc: Paul Jackson, Eric Masson, linux-kernel

On Wed, 11 Aug 2004, Erik Mouw wrote:

> On Wed, Aug 11, 2004 at 07:24:42AM -0400, Richard B. Johnson wrote:
> > On Wed, 11 Aug 2004, Erik Mouw wrote:
> > > Please don't mislead newbies, Richard. /dev/console is NOT a link to
> > > /dev/tty0, it's a completely different device:
> > >
> > > erik@abra2:~ >ls -l /dev/console
> > > crw-------    1 root     tty        5,   1 Apr  7 09:13 /dev/console
> > > erik@abra2:~ >ls -l /dev/tty0
> > > crw-------    1 root     tty        4,   0 Feb 10  2000 /dev/tty0
> > >
> >
> > Bullshit. I know how to use `file`.
> >
> > Script started on Wed Aug 11 07:21:39 2004
> > # file /dev/console
> > /dev/console: symbolic link to /dev/tty0
>
> It might be a symlink on your machine, but that doesn't mean it's the
> right way. For almost 7 years, /dev/console is a separate device, not a
> symlink. Here's the relevant section from Documentation/devices.txt:
>
>   The console device, /dev/console, is the device to which system
>   messages should be sent, and on which logins should be permitted in
>   single-user mode.  Starting with Linux 2.1.71, /dev/console is managed
>   by the kernel; for previous versions it should be a symbolic link to
>   either /dev/tty0, a specific virtual console such as /dev/tty1, or to
>   a serial port primary (tty*, not cu*) device, depending on the
>   configuration of the system.
>
> Linux-2.1.71 was released on December 4, 1997. In your signature you
> claim to run linux-2.4.26. Please update your system.
>
>
> Erik

RedHat is NOT Linux. The MAJOR-MINOR 5.1 used in RedHat for the
console has a very serious problem for anybody doing development
work. If there are any kernel messages, they go to __all__ open
terminals. This means that the only "quiet" terminals that may be
available to kill off a runaway process are available iff you can
log in over the network.

Most everybody I know, who does serious development work, and
certainly those who want to control where the %*)&$#!@ kernel
messages go, will make sure they go to the "ALT-F1" as I have
shown. The original query was about how to make kernel messages
go to where, i.e., what VT do they come from. I have shown
how you can control where they go.

Now, if you look at the kernel source, you will note that
just prior to attempting to exec /sbin/init, /dev/console
is opened. This means that you can properly use whatever
you want if you continue to use a sym-link.


Cheers,
Dick Johnson
Penguin : Linux version 2.4.26 on an i686 machine (5570.56 BogoMips).
            Note 96.31% of all statistics are fiction.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Fork and Exec a process within the kernel
  2004-08-11 11:55               ` Richard B. Johnson
@ 2004-08-11 12:51                 ` Erik Mouw
  2004-08-11 15:24                 ` Alan Cox
  1 sibling, 0 replies; 13+ messages in thread
From: Erik Mouw @ 2004-08-11 12:51 UTC (permalink / raw)
  To: Richard B. Johnson; +Cc: Paul Jackson, Eric Masson, linux-kernel

On Wed, Aug 11, 2004 at 07:55:52AM -0400, Richard B. Johnson wrote:
> RedHat is NOT Linux. The MAJOR-MINOR 5.1 used in RedHat for the
> console has a very serious problem for anybody doing development
> work. If there are any kernel messages, they go to __all__ open
> terminals. This means that the only "quiet" terminals that may be
> available to kill off a runaway process are available iff you can
> log in over the network.

If you don't want console messages, you just disable console at all, or
you use a serial console (using the "console=" on the kernel command
line), or you adjust the kernel console log level. Please have a look
at the "dmesg" manual page, especially the "-n" parameter. In emergency
situations, Alt-Sysrq-[0-8] will allow you to do the same (on VGA
consoles for PCs, that is. for serial consoles use Break-[0-8]).

> Most everybody I know, who does serious development work, and
> certainly those who want to control where the %*)&$#!@ kernel
> messages go, will make sure they go to the "ALT-F1" as I have
> shown.

Not all the world is a PC, there is a lot of linux beyond x86. Looks to
me like you haven't done development on embedded systems that don't
have any VGA terminal at all.

Getting kernel messages on a certain pseudo tty is just a matter of
supplying the correct "console=" paramater to the kernel. For example:
"console=tty1" will get your console output on pseudo tty 1.
Alternatively, you can configure syslog to write all kernel messages to
a pseudo tty.

> The original query was about how to make kernel messages
> go to where, i.e., what VT do they come from. I have shown
> how you can control where they go.

Here is the original question:

  Thanks for the pointer! My user mode program is running. Any idea how to
  control which console it shows up on?

No reference on how to get kernel messages somewhere.

> Now, if you look at the kernel source, you will note that
> just prior to attempting to exec /sbin/init, /dev/console
> is opened. This means that you can properly use whatever
> you want if you continue to use a sym-link.

That was true for linux < 2.1.71, which was released almost 7 years
ago. Things have changed. Newer kernels use the "console=" kernel
command line to select the console. With multiple the "console="
parameter, you can even have mutiple consoles.


Erik

-- 
+-- Erik Mouw -- www.harddisk-recovery.com -- +31 70 370 12 90 --
| Lab address: Delftechpark 26, 2628 XH, Delft, The Netherlands

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Fork and Exec a process within the kernel
  2004-08-11 11:55               ` Richard B. Johnson
  2004-08-11 12:51                 ` Erik Mouw
@ 2004-08-11 15:24                 ` Alan Cox
  1 sibling, 0 replies; 13+ messages in thread
From: Alan Cox @ 2004-08-11 15:24 UTC (permalink / raw)
  To: root; +Cc: Erik Mouw, Paul Jackson, Eric Masson, Linux Kernel Mailing List

On Mer, 2004-08-11 at 12:55, Richard B. Johnson wrote:
> RedHat is NOT Linux. The MAJOR-MINOR 5.1 used in RedHat for the
> console has a very serious problem for anybody doing development

Actually you might want to

a) man sysklogd
b) check devices.txt distributed with the kernel.

The former will explain why you are wrong and how to channel log
messages, the latter will explain how you are further wrong.


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2004-08-11 16:26 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-08-09 21:03 Fork and Exec a process within the kernel Eric Masson
2004-08-09 23:10 ` Paul Jackson
2004-08-10 15:22   ` Eric Masson
2004-08-10 16:21     ` Paul Jackson
2004-08-10 18:20       ` Lee Revell
2004-08-10 19:03       ` Richard B. Johnson
2004-08-11  9:51         ` Erik Mouw
2004-08-11 11:24           ` Richard B. Johnson
2004-08-11 11:41             ` Erik Mouw
2004-08-11 11:55               ` Richard B. Johnson
2004-08-11 12:51                 ` Erik Mouw
2004-08-11 15:24                 ` Alan Cox
2004-08-10 16:33     ` Jan-Benedict Glaw

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox