Re,
> Surely you must be able to fork in a GTK program, since this is used in
> the GNOME libraries for things like scores, program loading and other
> things (the best example being the panel, where fork'ing and exec'ing are
> its main job.
ok, fine
> Do you know which process is dieing? Also, what happens if you run your
> script like this:
>
> $ gdb python
> (gdb copyright message)
> gdb> run scriptname.py
>
> Which of the two processes dies? If the main process dies, could you try
> doing a backtrace (with the bt command under gdb), and see if it gives any
> clues.
I've attached the test script I'm using (fork.py):
- The script works without the "import gtk" line
- Including the "import gtk" line I get the following error:
Gdk-Message: locale not supported by C library
parentpid: 4348
childpid: 4349
Gdk-Message:
** ERROR **: sigpipe caught
- Running it through gdb:
(gdb) run fork.py
Starting program: /usr/local/bin/python fork.py
Gdk-Message: locale not supported by C library
childpid: 4354
parentpid: 4351
Program received signal SIGPIPE, Broken pipe.
0x40096744 in __write ()
(gdb) info program
Using the running image of child Pid 4351.
Program stopped at 0x40096744.
It stopped with signal SIGPIPE, Broken pipe.
(gdb) bt
#0 0x40096744 in __write ()
#1 0x402f8c84 in __DTOR_END__ ()
#2 0x402aace9 in _X11TransWrite ()
#3 0x40291cd8 in _XFlushInt ()
#4 0x40292fe2 in _XReply ()
#5 0x4028f129 in XSync ()
#6 0x40278bd9 in XCloseDisplay ()
#7 0x4021c586 in gdk_exit_func () at gdk.c:3048
#8 0x4004a6f5 in exit (status=0) at exit.c:55
Hope this helps somehow ...
Martin
--
Martin Preishuber - Student, ECLiPt Member, SysAdmin
http://eclipt.uni-klu.ac.at,
mailto:[EMAIL PROTECTED]
The difference between legal separation and divorce is that legal
separation gives the man time to hide his money.
#!/usr/local/bin/python
import gtk
import os
import sys
result = os.fork()
def child():
print "childpid: " + str(os.getpid())
sys.exit()
def parent():
print "parentpid: " + str(os.getpid())
if (result == 0):
child()
else:
parent()
os.waitpid(result, 0)