mysqld_safe holding open a pty/tty on FreeBSD (7.x and 8.x)
Jeremy Chadwick
freebsd at jdc.parodius.com
Thu Sep 30 07:28:20 UTC 2010
On Thu, Sep 30, 2010 at 09:03:33AM +0200, Ed Schouten wrote:
> Hi Jeremy,
>
> * Jeremy Chadwick <freebsd at jdc.parodius.com> wrote:
> > 1) "mysqld_safe > /dev/null 2>&1 &" never released the tty
> > 2) "nohup mysqld_safe > /dev/null 2>&1 &" did release the tty
>
> What happens if you run the following command?
>
> daemon -cf mysqld_safe
Let's try it and find out. This is all being done from pts/2.
icarus# ps -auxwww -U mysql | grep mysqld_safe
mysql 9997 0.0 0.0 8228 1592 1- I 11:38PM 0:00.01 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/storage/mysql/my.cnf --user=mysql --datadir=/storage/mysql --pid-file=/storage/mysql/icarus.home.lan.pid --skip-innodb
icarus# /usr/local/etc/rc.d/mysql-server stop
Stopping mysql.
Waiting for PIDS: 10078.
icarus# daemon -c -f -u mysql /usr/local/bin/mysqld_safe --defaults-extra-file=/storage/mysql/my.cnf --user=mysql --datadir=/storage/mysql --pid-file=/storage/mysql/icarus.home.lan.pid --skip-innodb
icarus# ps -auxwww -U mysql
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
mysql 11036 0.0 0.0 8228 1600 ?? Is 12:21AM 0:00.01 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/storage/mysql/my.cnf --user=mysql --datadir=/storage/mysql --pid-file=/storage/mysql/icarus.home.lan.pid --skip-innodb
mysql 11116 0.0 0.3 35100 11032 ?? I 12:21AM 0:00.02 [mysqld]
icarus# exit
$ exit
[another window, different tty]
icarus# pstat -t | grep pts/2
icarus#
Summary: looks good to me.
> The point is that FreeBSD's pts(4) driver only deallocates TTYs when
> it's really sure nothing uses it anymore. Even if there is not a single
> file descriptor referring to the slave device, it has to wait until
> there exist no processes which have the TTY as its controlling TTY.
Ah I see. Well that would explain the difference between Linux and
FreeBSD then -- it sounds like Linux has a one-off with regards to fds
that point to /dev/null.
> The `pstat -t' command is quite useful to figure out whether there is
> still a session associated with the TTY.
>
> See the following thread:
>
> http://lists.freebsd.org/pipermail/freebsd-ports/2010-July/062417.html
Ahhh, two people pointing me to the same thread, sweet. :-) I wasn't
subscribed to -ports back in July, else I'd almost certainly have said
something then.
It's exactly as you stated in that thread -- the tty is in "G" state
(waiting to be freed/process to exist). Please note the below output
was obtained *before* attempting the "daemon -cf" stuff you recommended.
icarus# pstat -t | grep pts/1
pts/1 0 0 0 0 0 0 0 0 9372 0 G
Until rc(8) can be updated to support daemon(8) natively, the ~76 ports
which Do The Wrong Thing(tm) should get updated to do it this way. Ones
like mysqlXX-server should be placed high on the priority list given
their popularity/importance.
--
| Jeremy Chadwick jdc at parodius.com |
| Parodius Networking http://www.parodius.com/ |
| UNIX Systems Administrator Mountain View, CA, USA |
| Making life hard for others since 1977. PGP: 4BD6C0CB |
More information about the freebsd-stable
mailing list