#include #include #include #include using namespace std; QSharedMemory region; int parent(int argc, char** argv) { QCoreApplication app(argc, argv); QProcess process; QStringList args = { "child"}; cout << "I am the parent" << endl; region.setKey("myregion"); region.create(1024); assert(region.isAttached()); process.setProcessChannelMode(QProcess::ForwardedChannels); process.start("qsharedmemory_test", args); process.waitForFinished(); region.lock(); // this will never return app.exec(); return 0; } int child(int argc, char** argv) { QCoreApplication app(argc, argv); int* crash = nullptr; cout << "I am the child" << endl; region.setKey("myregion"); region.attach(); region.lock(); // intentionally crash *crash = 5; assert(region.isAttached()); app.exec(); return 0; } int main(int argc, char** argv) { if (argc < 2) { cout << "Missing argument" << endl; exit(EXIT_FAILURE); } ; if (!strcmp(argv[1], "parent")) return parent(argc, argv); else if (!strcmp(argv[1], "child")) return child(argc, argv); else { cout << "Unexpected argument"; exit(EXIT_FAILURE); } }