VM freeze and crash when saving

David T. Lewis lewis at mail.msen.com
Fri Apr 6 14:31:43 UTC 2007


On Fri, Apr 06, 2007 at 03:17:31PM +0200, Florian Minjat wrote:
> David T. Lewis wrote:
> >Check where VMMaker put the sources. If it was /home/squeak/vmmaker/src32,
> >then make a line to /home/squeak/vmmaker/src, like this:
> >$ cd /home/squeak/vmmaker
> >$ ln -s src32 src
> >
> >Then try configure and make once more.
> >
> >But by the way, I don't think you really need to build the plugin.
> >It's already included in most of the Unix VMs. If you can inspect
> >"OSProcess thisOSProcess" and see a UnixProcess with pid and other
> >variables filled in, then you already have the plugin.
> >
> >Dave
> 
> It was ok for the sources.
> I tried differents things, all with differents errors...
> But I also tried "OSProcess thisOSProcess" and I got a process with 
> the right pid. So no plugin required and wind waving since one hour...
> 
> I tried to see the man page of fork (man fork, man 2 fork, ...), but I 
> don't have any.
> 
> Florian

Here are copies of the man pages from a FreeBSD system and from
a Linux system. When you do #forkSqueak, it uses this fork() system
call to start an (almost) exact copy of your Squeak VM and image,
running in a separate OS process. If the system call fails, it
is because of one of the reasons documented in these man pages.
The specifics may vary for different flavors of Unix, and especially
if your system manager has imposed some limits on process or
memory usage. Since you are running on a hosted server, it is
very likely that the vendor has imposed limits of some sort.

Dave


FORK(2)		    Linux Programmer's Manual		  FORK(2)



NAME
       fork - create a child process

SYNOPSIS
       #include <sys/types.h>
       #include <unistd.h>

       pid_t fork(void);

DESCRIPTION
       fork  creates a child process that differs from the parent
       process only in its PID and PPID, and  in  the  fact  that
       resource	 utilizations are set to 0.  File locks and pend­
       ing signals are not inherited.

       Under  Linux,  fork  is	implemented  using  copy-on-write
       pages,  so  the	only penalty incurred by fork is the time
       and memory required to duplicate the parent's page tables,
       and to create a unique task structure for the child.

RETURN VALUE
       On  success,  the  PID of the child process is returned in
       the parent's thread of execution, and a 0 is  returned  in
       the child's thread of execution.	 On failure, a -1 will be
       returned in the parent's context, no child process will be
       created, and errno will be set appropriately.

ERRORS
       EAGAIN fork  cannot allocate sufficient memory to copy the
	      parent's page tables and allocate a task	structure
	      for the child.

       ENOMEM fork failed to allocate the necessary kernel struc­
	      tures because memory is tight.

CONFORMING TO
       The fork call conforms to SVr4, SVID, POSIX,  X/OPEN,  BSD
       4.3.

SEE ALSO
       clone(2), execve(2), vfork(2), wait(2)



Linux 1.2.9		    1995-06-10			  FORK(2)


FORK(2) 		  FreeBSD System Calls Manual		       FORK(2)

NAME
     fork -- create a new process

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <sys/types.h>
     #include <unistd.h>

     pid_t
     fork(void);

DESCRIPTION
     The fork() system call causes creation of a new process.  The new process
     (child process) is an exact copy of the calling process (parent process)
     except for the following:

	   o   The child process has a unique process ID.

	   o   The child process has a different parent process ID (i.e., the
	       process ID of the parent process).

	   o   The child process has its own copy of the parent's descriptors.
	       These descriptors reference the same underlying objects, so
	       that, for instance, file pointers in file objects are shared
	       between the child and the parent, so that an lseek(2) on a
	       descriptor in the child process can affect a subsequent read(2)
	       or write(2) by the parent.  This descriptor copying is also
	       used by the shell to establish standard input and output for
	       newly created processes as well as to set up pipes.

	   o   The child process' resource utilizations are set to 0; see
	       setrlimit(2).

	   o   All interval timers are cleared; see setitimer(2).

RETURN VALUES
     Upon successful completion, fork() returns a value of 0 to the child
     process and returns the process ID of the child process to the parent
     process.  Otherwise, a value of -1 is returned to the parent process, no
     child process is created, and the global variable errno is set to indi-
     cate the error.

ERRORS
     The fork() system call will fail and no child process will be created if:

     [EAGAIN]		The system-imposed limit on the total number of pro-
			cesses under execution would be exceeded.  The limit
			is given by the sysctl(3) MIB variable KERN_MAXPROC.
			(The limit is actually ten less than this except for
			the super user).

     [EAGAIN]		The user is not the super user, and the system-imposed
			limit on the total number of processes under execution
			by a single user would be exceeded.  The limit is
			given by the sysctl(3) MIB variable
			KERN_MAXPROCPERUID.

     [EAGAIN]		The user is not the super user, and the soft resource
			limit corresponding to the resource argument
			RLIMIT_NPROC would be exceeded (see getrlimit(2)).

     [ENOMEM]		There is insufficient swap space for the new process.

SEE ALSO
     execve(2), rfork(2), setitimer(2), setrlimit(2), vfork(2), wait(2)

HISTORY
     The fork() function appeared in Version 6 AT&T UNIX.

FreeBSD 6.2			 June 4, 1993			   FreeBSD 6.2





More information about the Squeak-dev mailing list