Error -10810 Opening Applications or Relaunching FinderError -10810 is a Launch Services result code indicating an unknown error. One cause of this error is that the Mac® OS X process table is full. When the process table is full, new (not currently running) applications cannot be opened until another running application ends. Programming errors in third-party applications can fill-up the process table, leading to the -10810 error when opening an application. This FAQ discusses: the background of this problem; its history, reported workarounds, and general troubleshooting advice; and provides a procedure for identifying the process or processes that are filling the process table. It is based upon extensive research of this problem on the Web, especially a 2009 Apple® Mailing Lists post by contributor Terry Lambert. This FAQ expounds upon Terry's post in an attempt to make the cause and resolution of this problem more accessible to the general Mac OS X user. BackgroundAll running programs on your Mac are processes. This includes both applications that you open and faceless background processes, i.e. processes without a graphical user interface (GUI), such as mds (the Spotlight metadata server) or cupsd (the CUPS printing daemon). Activity Monitor shows a list of all running processes. Finder® is an application, hence it is a process. Processes can launch other processes, known as child processes. For example, the launchd (launch daemon) process opens many background processes when you start up or log in to your Mac; launchd is the parent process and each process it opens is a child process of launchd. Mac OS X tracks running processes in a process table. Mac OS X has a default limit of 266 user processes per account. You can see this limit by issuing the Terminal command ulimit -a and noting the max user processes value. Once this limit is reached, the process table is full: new processes cannot be started until a currently running process terminates, hence new applications cannot be opened. If you attempt to open a new application when the process table is full, an alert dialog will appear showing error code -10810, e.g. The application appname.app can't be opened. where appname is the name of the application you attempted to open. If Finder is hung and you attempt to relaunch it when the process table is full, an alert dialog appears with the message: The application Finder.app can't be opened. The limit of 266 user processes per account is set high enough that it would be virtually impossible for a user to open enough applications to fill the process table (the default limit is different under Mac OS X Server). Programming errors, especially in third-party applications, can lead to three general causes of a full process table: zombie processes, fork bombs, and runaway processes. If an application (process) that creates (spawns) child processes either crashes or fails to properly clean up (reap) its child processes, the child processes become zombie processes. Zombie processes are essentially dead process that consume process table entries. Since they are not running, zombie processes do not appear in Activity Monitor. If an application contains a fork bomb programming error, the application repeatedly opens new instances of itself; each new instance takes an entry in the process table until the process table is full. A variation of this is where an application that spawns child processes encounters an infinite loop bug in its child-creation process, thereby filling the process table with instances of the same child process. Such an application is a runaway process. In Activity Monitor, one or both of the following conditions may be seen:
Once the process table is full, the system log file system.log will show blocks of proc: table is full messages. History, workarounds, and general troubleshootingThe -10810 error has a long history in Mac OS X, especially in Mac OS X 10.6 Snow Leopard® where one Discussions topic concerning -10810 and Finder has collected hundreds of posts over the years. Some speculate that a bug in Mac OS X is at the heart of the problem. Nevertheless, Apple has yet to publish a fix or a Knowledge Base article for this problem, implying that Apple's own research has determined that this is not a Mac OS X bug. A number of workarounds have been suggested for this problem, but they generally do not address the root cause: why the process table is full. One oft-cited workaround recommends specific Terminal commands to (temporarily) restart Finder. Some claim this to be a "fix" when it is merely restarting Finder and not addressing the underlying cause. Some advocate resetting Launch Services as a solution, but -10810 issues are generally not a problem with the Launch Services database: the problem is usually due to a filled processs table. Accessing external hard drives, RAID arrays, shared volumes, or network-attached storage (NAS) has often been attributed to the -10810 problem, again leading to speculation about a Mac OS X bug. Nevertheless, many of these reports do not consider the possibility of problems on the disk they are mounting directory corruption, bad sectors, a defective drive or that an errant kernel extension for their third-party storage device may be the problem. These disk-related problems may cause conditions where the process table is filled, such as the endless spawning of smbd processes. If -10810 errors arise after connecting external drives, check the drives with Disk Utility. Bad sectors can be identified with the Surface Scan feature of Micromat® Tech Tool® Pro. Some users have taken dangerous steps when this problem appears after connecting an external drive, such as physically disconnecting the external drive without first ejecting (unmounting) it. Disconnecting an external drive before ejecting it can damage the drive's partition map, rendering its data irretrievable except possibly via data recovery techniques. It is better to shut down the Mac, then power-off and disconnect an external drive if problems with an external drive are suspected. In certain cases, replacing bad hard drives or zeroing a drive to map bad sectors out of service (aka sparing) solved the -10810 problem. In other cases, some have reported solving the problem by erasing the startup disk (Macintosh HD), reinstalling Mac OS X, and then individually reinstalling their applications. This solution may have worked because the fresh installation of both Mac OS X and third-party applications omitted some obsolete or defective third-party kernel extension or application, respectively, that was filling the process table. Had they restored the system and applications from a backup, such as via Migration Assistant, Time Machine®, or a third-party backup and recovery solution, the problem would likely have recurred since they would restore the errant application or kernel extension. More likely, programming errors in third-party applications are to blame, especially test versions of software in the Beta or Release Candidate stages of development. Unstable applications that litter the process table with zombie processes or that contain fork bombs are a sure path to a -10810 problem. A careful reading of some of the many reports on the Web of the -10810 error frequently cite third-party applications as the cause; uninstalling the offending application, updating to a later version, or installing the most recent stable version often solves the problem. If this problem has suddenly appeared out of nowhere, the latest third-party application you installed may be the cause. Do not use the application again and report the problem to the developer. Third-party firewall or antivirus applications may contain a programming error whereby they deadlock themselves, again resulting in a situation that fills the process table. If you recently installed or updated such software, disabling or uninstalling it should resolve the problem. If this is the case, again report the problem to the developer. Third-party kernel extensions for third-party hardware should also be suspect. If you have installed third-party hardware that also required the installation of associated kernel extensions, starting up in Safe Mode will prevent third-party kernel extensions form loading. Using your Mac in this way for several days may help rule out applications as the cause of -10810 issues. If -10810 errors return after restarting your Mac normally and using third-party hardware, this implies either the third-party hardware or the associated third-party kernel extensions are the cause: troubleshoot the hardware per its manual or contact the manufacturer. If you are unsure of the application that is causing the problem or if more than one application may be at fault the Procedure below should identify the culprit. ProcedureUse this procedure is to identify and terminate the process or processes filling the process table. It expounds upon the process specified in the previously-cited post by Terry Lambert. Terminal, in the Macintosh HD > Applications > Utilities folder, is the tool for this task. You will need at least three Terminal windows (shells) open before the -10810 error occurs: once the -10810 error occurs, it will be virtually impossible to open Terminal. If you are prone to making typographical errors in Terminal commands, it helps to open four or more Terminal windows. Identifying the errant processes will use the ps (process status) command. Terminating the errant processes will use the kill command, the killall command, or both. It may be necessary to preface these commands with the exec command. The exec command executes the command that follows it in place of the current shell, i.e. without creating a new process. This may be necessary since the process table is full. The downside of this is that exec effectively performs a log out of that shell once the command it prefaces has executed, preventing further commands from being issued in that Terminal window; this is noted by [Process completed] appearing after the output from the command. This is another reason why it is important to open multiple Terminal windows before the -10810 error occurs.
Kill the parents of Zombie processesThe general procedure is:
The following example explains this approach. In the output from the exec ps gaxlww command, zombie processes are identified by the following characteristics:
To find the parent process of a zombie process, examine the PPID (Parent Process ID) column entry for the zombie processes. The process whose PID is the same as the PPID of the zombie processes is the application creating the zombie processes. A few zombie processes, especially if their parent process numbers differ, are acceptable: the zombie processes may be waiting for their parent processes to read their exit states before reaping them, at which time the zombie processes are removed from the process table. If the parent process dies e.g., the application named by the parent process quits unexpectedly the launchd process will normally become the parent process of the zombie processes and clean them up accordingly. The problem arises when there are many zombie processes with a specific, running parent process. Zombie processes cannot be killed: one must kill the parent process of the zombie processes, then launchd will clean up the zombie processes. The following hypothetical example of the exec ps gaxlww output shows many zombie processes. The ellipsis ( ) indicate gaps in the output to save space in this presentation.
The PPID (parent process ID) of each zombie process is PID (process ID) 47822, highlighted in red in the example above. Process 47822, the application ZombieMaker, is failing to reap its child processes, creating zombie processes that are filling the process table. To terminate the parent process, issue one of the following commands in the second Terminal window:
where PID is the process number of the application creating zombie processes. In the example above, one of the following commands
will terminate the application ZombieMaker; launchd will clean up the zombie processes soon thereafter. Note that using exec in the kill command will end the session in that Terminal window, but if you have killed the correct process, you should be able to open additional Terminal windows. Kill fork bombs and runaway processesThe general procedure is:
As in the example discussed in "Kill the parents of Zombie processes" above, it may be necessary to preface the kill or killall commands with exec for success. Using exec in these command will end the session in that Terminal window; if you have killed the correct process, you should be able to open additional Terminal windows. The following examples illustrate this approach. Example 1In the following hypothetical example of output from the exec ps gaxlww command, the application Forkbomber contains a fork bomb that is opening multiple instances of itself:
The COMMAND column of first line in the sample /Applications/Forkbomber.app/Contents/MacOS/forkbomber -psn_0_524416 shows the path to the executable file (the forkbomber executable within the Contents folder of Forkbomber.app bundle) and the argument with which it was opened (-psn_0_524416). The remaining lines in the sample show process table entries for the copies of Forkbomber opened by the fork bomb. Note how the PPID of one entry points to the PID of the entry above it, e.g. PID 62810 was opened by (is a child process of) PID 62809, which was opened by PID 62807, etc., all the way back to PID 62782, the opening of Forkbomber. To terminate all copies of a process with the same process name, we use one of the following killall commands:
where process_name is the name of the process (running executable file) to be terminated. To kill all copies of Forkbomber specifically, the executable forkbomber we issue one of the following commands in the second Terminal window:
Note that:
Example 2In the following hypothetical example of output from the exec ps gaxlww command, the application BadApp is a runaway process:
The application that started the problem is BadApp. Activity Monitor might give a clue to this: the process BadApp may appear in red and display (Not Responding), indicating that BadApp hung. The multiple instances of (bash) in the COMMAND column are the result of BadApp opening a bash shell script that contains a fork bomb. It could have opened another child process in an infinite loop, in which case the name of that child process would appear repeatedly in the COMMAND column instead of (bash). The process ID (PID) of BadApp is 1214; we terminate it by typing one of the following kill commands in the second Terminal window:
We next terminate all instances of the fork bomb shell script by typing one of the following killall commands in the third Terminal window:
Note that:
ReferencesKnight, Adam. "When You Can't Start Programs Because of a -10810 Error." Mac Geekery. 11 May 2006. Last accessed on 20 July 2011. Lambert, Terry. "Re: error -10810." Apple Mailing Lists, darwin-dev list. 5 September 2009. Last accessed 20 July 2011. Singer, David. "Watch out for zombies!" Read This Blog. 17 April 2009. Last accessed 20 July 2011. Solaar, Kel, et. al. "The application Finder.app can't be opened." Apple Support Communities. 30 August 2009. Last accessed 20 July 2011. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||