Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 35519)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 35520)
@@ -65,4 +65,8 @@
 #include <QHelpEvent>
 #include <QLocale>
+
+#ifdef VBOX_WITH_PIDFILE
+# include <QTextStream>
+#endif /* VBOX_WITH_PIDFILE */
 
 #include <math.h>
@@ -444,4 +448,29 @@
     return m_pVirtualMachine;
 }
+
+#ifdef VBOX_WITH_PIDFILE
+void VBoxGlobal::createPidfile()
+{
+    if (!m_strPidfile.isEmpty())
+    {
+        qint64 pid = qApp->applicationPid();
+        QFile file(m_strPidfile);
+        if (file.open(QIODevice::WriteOnly | QIODevice::Truncate))
+        {
+             QTextStream out(&file);
+             out << pid << endl;
+        }
+        else
+            LogRel(("Failed to create pid file %s\n", m_strPidfile.toUtf8().constData()));
+    }
+}
+
+void VBoxGlobal::deletePidfile()
+{
+    if (   !m_strPidfile.isEmpty()
+        && QFile::exists(m_strPidfile))
+        QFile::remove(m_strPidfile);
+}
+#endif
 
 bool VBoxGlobal::brandingIsActive (bool aForce /* = false*/)
@@ -5006,4 +5035,11 @@
             }
         }
+#ifdef VBOX_WITH_PIDFILE
+        else if (!::strcmp(arg, "-pidfile") || !::strcmp(arg, "--pidfile"))
+        {
+            if (++i < argc)
+                m_strPidfile = QString(qApp->argv()[i]);
+        }
+#endif /* VBOX_WITH_PIDFILE */
         else if (!::strcmp(arg, "-seamless") || !::strcmp(arg, "--seamless"))
         {
@@ -5172,4 +5208,8 @@
         }
     }
+#endif
+
+#ifdef VBOX_WITH_PIDFILE
+    deletePidfile();
 #endif
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h	(revision 35519)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h	(revision 35520)
@@ -147,4 +147,9 @@
     QWidget *mainWindow() const { return mMainWindow; }
 
+#ifdef VBOX_WITH_PIDFILE
+    void createPidfile();
+    void deletePidfile();
+#endif
+
     /* branding */
     bool brandingIsActive (bool aForce = false);
@@ -863,4 +868,8 @@
     QFileIconProvider m_globalIconProvider;
 
+#ifdef VBOX_WITH_PIDFILE
+    QString m_strPidfile;
+#endif
+
     friend VBoxGlobal &vboxGlobal();
 };
Index: /trunk/src/VBox/Frontends/VirtualBox/src/main.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/main.cpp	(revision 35519)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/main.cpp	(revision 35520)
@@ -260,4 +260,7 @@
             "  --rmode %-18s select different render mode (default is %s)\n"
             "  --no-startvm-errormsgbox   do not show a message box for VM start errors\n"
+# ifdef VBOX_WITH_PIDFILE
+            "  --pid-file file            create a pidfile file when a VM is up and running\n"
+# endif
 # ifdef VBOX_WITH_DEBUGGER_GUI
             "  --dbg                      enable the GUI debug menu\n"
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 35519)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 35520)
@@ -282,4 +282,8 @@
 #endif
 
+#ifdef VBOX_WITH_PIDFILE
+    vboxGlobal().createPidfile();
+#endif
+
     /* Warn listeners about machine was started: */
     emit sigMachineStarted();
