From: Brian Fundakowski Feldman Date: 2000-08-23T11:32:41+09:00 Subject: [ruby-talk:4557] New feature: Process.waitall This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --0-548198641-966997954=:30360 Content-Type: TEXT/PLAIN; charset=US-ASCII Okay, I figured that I wanted a new routine that really had all of the semantics I thought were useful :) Also, I needed the W* functions. Check this out: irb(main):001:0> (0..4).each {|c| fork { sleep 1 + 2 * c; exit c}} 0..4 irb(main):002:0> x = Process.waitall [[34040, 0], [34041, 256], [34042, 512], [34043, 768], [34044, 1024]] irb(main):003:0> x.each {|p| p Process.wexitstatus p[1]} 0 1 2 3 4 [[34040, 0], [34041, 256], [34042, 512], [34043, 768], [34044, 1024]] Neat? :) I've included the implementation (in diff -u format). I've not tested the NO_WAITPID case since I don't have a "no waitpid" machine, but I think I did the code correctly for that. -- Brian Fundakowski Feldman \ FreeBSD: The Power to Serve! / green@FreeBSD.org `------------------------------' --0-548198641-966997954=:30360 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=patch-aa Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=patch-aa LS0tIHByb2Nlc3MuYy5vcmlnCU1vbiBKdWwgMjQgMDM6MTY6MTMgMjAwMA0K KysrIHByb2Nlc3MuYwlUdWUgQXVnIDIyIDIyOjI0OjU3IDIwMDANCkBAIC0x NTcsNiArMTU3LDMwIEBADQogICAgIGRhdGEtPnN0YXR1cyA9IHZhbHVlOw0K ICAgICByZXR1cm4gU1RfREVMRVRFOw0KIH0NCisNCitzdHJ1Y3Qgd2FpdGFs bF9kYXRhIHsNCisgICAgaW50IHBpZDsNCisgICAgaW50IHN0YXR1czsNCisg ICAgVkFMVUUgYXJ5Ow0KK30NCisNCitzdGF0aWMgaW50DQord2FpdGFsbF9l YWNoKGtleSwgdmFsdWUsIGRhdGEpDQorICAgIGludCBrZXksIHZhbHVlOw0K KyAgICBzdHJ1Y3Qgd2FpdF9kYXRhICpkYXRhOw0KK3sNCisgICAgVkFMVUUg cGlkX3N0YXR1c19tZW1iZXI7DQorDQorICAgIGlmIChkYXRhLT5zdGF0dXMg IT0gLTEpIHJldHVybiBTVF9TVE9QOw0KKw0KKyAgICBkYXRhLT5waWQgPSBr ZXk7DQorICAgIGRhdGEtPnN0YXR1cyA9IHZhbHVlOw0KKyAgICBwaWRfc3Rh dHVzX21lbWJlciA9IHJiX2FyeV9uZXcyKDIpOw0KKyAgICByYl9hcnlfcHVz aChwaWRfc3RhdHVzX21lbWJlciwgSU5UMk5VTShrZXkpKTsNCisgICAgcmJf YXJ5X3B1c2gocGlkX3N0YXR1c19tZW1iZXIsIElOVDJOVU0odmFsdWUpKTsN CisgICAgcmJfYXJ5X3B1c2goZGF0YS0+YXJ5LCBwaWRfc3RhdHVzX21lbWJl cik7DQorICAgIHJldHVybiBTVF9ERUxFVEU7DQorfQ0KICNlbmRpZg0KIA0K IHN0YXRpYyBWQUxVRQ0KQEAgLTE4OSw2ICsyMTMsNTggQEANCiB9DQogDQog c3RhdGljIFZBTFVFDQorcmJfZl93YWl0YWxsKCkNCit7DQorICAgIFZBTFVF IHBpZF9zdGF0dXNfYXJ5LCBwaWRfc3RhdHVzX21lbWJlcjsNCisgICAgaW50 IHBpZCwgc3RhdGU7DQorI2lmZGVmIE5PX1dBSVRQSUQNCisgICAgc3RydWN0 IHdhaXRhbGxfZGF0YSBkYXRhOw0KKw0KKyAgICBkYXRhLmFyeSA9IHBpZF9z dGF0dXNfYXJ5ID0gcmJfYXJ5X25ldygpOw0KKyAgICBkYXRhLnN0YXR1cyA9 IC0xOw0KKyAgICBzdF9mb3JlYWNoKHBpZF90YmwsIHdhaXRhbGxfZWFjaCwg JmRhdGEpOw0KKyAgICBpZiAoZGF0YS5zdGF0dXMgIT0gLTEpIHsNCisJcmJf bGFzdF9zdGF0dXMgPSBkYXRhLnN0YXR1czsNCisJcmV0dXJuIHBpZF9zdGF0 dXNfYXJ5Ow0KKyAgICB9DQorDQorICAgIGZvciAocGlkID0gLTE7Oykgew0K KwlwaWQgPSB3YWl0KCZzdGF0ZSk7DQorCWlmIChwaWQgPT0gLTEpIHsNCisJ ICAgIGlmIChlcnJubyA9PSBFQ0hJTEQpDQorCQlicmVhazsNCisgICAgICAg ICAgICBpZiAoZXJybm8gPT0gRUlOVFIpIHsNCisJCXJiX3RocmVhZF9zY2hl ZHVsZSgpOw0KKwkJY29udGludWU7DQorCSAgICB9DQorCSAgICByYl9zeXNf ZmFpbCgwKTsNCisJfQ0KKwlwaWRfc3RhdHVzX21lbWJlciA9IHJiX2FyeV9u ZXcyKDIpOw0KKwlyYl9hcnlfcHVzaChwaWRfc3RhdHVzX21lbWJlciwgSU5U Mk5VTShwaWQpKTsNCisJcmJfYXJ5X3B1c2gocGlkX3N0YXR1c19tZW1iZXIs IElOVDJOVU0oc3RhdGUpKTsNCisJcmJfYXJ5X3B1c2gocGlkX3N0YXR1c19h cnksIHBpZF9zdGF0dXNfbWVtYmVyKTsNCisgICAgfQ0KKyAgICBpZiAoUkFS UkFZKHBpZF9zdGF0dXNfYXJ5KS0+bGVuICE9IDApDQorCXJiX2xhc3Rfc3Rh dHVzID0gSU5UMkZJWChzdGF0ZSk7DQorI2Vsc2UNCisgICAgcGlkX3N0YXR1 c19hcnkgPSByYl9hcnlfbmV3KCk7DQorICAgIGZvciAocGlkID0gLTE7Oykg ew0KKwlwaWQgPSByYl93YWl0cGlkKC0xLCAwLCAmc3RhdGUpOw0KKwlpZiAo cGlkID09IC0xKSB7DQorCSAgICBpZiAoZXJybm8gPT0gRUNISUxEKQ0KKwkJ YnJlYWs7DQorCSAgICByYl9zeXNfZmFpbCgwKTsNCisJfQ0KKwlwaWRfc3Rh dHVzX21lbWJlciA9IHJiX2FyeV9uZXcyKDIpOw0KKwlyYl9hcnlfcHVzaChw aWRfc3RhdHVzX21lbWJlciwgSU5UMk5VTShwaWQpKTsNCisJcmJfYXJ5X3B1 c2gocGlkX3N0YXR1c19tZW1iZXIsIElOVDJOVU0oc3RhdGUpKTsNCisJcmJf YXJ5X3B1c2gocGlkX3N0YXR1c19hcnksIHBpZF9zdGF0dXNfbWVtYmVyKTsN CisgICAgfQ0KKyNlbmRpZg0KKyAgICByZXR1cm4gcGlkX3N0YXR1c19hcnk7 DQorfQ0KKw0KK3N0YXRpYyBWQUxVRQ0KIHJiX2Zfd2FpdHBpZChvYmosIHZw aWQsIHZmbGFncykNCiAgICAgVkFMVUUgb2JqLCB2cGlkLCB2ZmxhZ3M7DQog ew0KQEAgLTIwMyw2ICsyNzksODMgQEANCiAgICAgcmV0dXJuIElOVDJGSVgo cGlkKTsNCiB9DQogDQorc3RhdGljIFZBTFVFDQorcmJfZl93aWZzdG9wcGVk KG9iaiwgc3RhdHVzbnVtKQ0KKyAgICBWQUxVRSBvYmosIHN0YXR1c251bTsN Cit7DQorICAgIGludCBzdGF0dXMgPSBOVU0ySU5UKHN0YXR1c251bSk7DQor DQorICAgIGlmIChXSUZTVE9QUEVEKHN0YXR1cykpDQorCXJldHVybiBRdHJ1 ZTsNCisgICAgZWxzZQ0KKwlyZXR1cm4gUWZhbHNlOw0KK30NCisNCitzdGF0 aWMgVkFMVUUNCityYl9mX3dzdG9wc2lnKG9iaiwgc3RhdHVzbnVtKQ0KKyAg ICBWQUxVRSBvYmosIHN0YXR1c251bTsNCit7DQorICAgIGludCBzdGF0dXMg PSBOVU0ySU5UKHN0YXR1c251bSk7DQorDQorICAgIHJldHVybiBJTlQyTlVN KFdTVE9QU0lHKHN0YXR1cykpOw0KK30NCisNCitzdGF0aWMgVkFMVUUNCity Yl9mX3dpZnNpZ25hbGVkKG9iaiwgc3RhdHVzbnVtKQ0KKyAgICBWQUxVRSBv YmosIHN0YXR1c251bTsNCit7DQorICAgIGludCBzdGF0dXMgPSBOVU0ySU5U KHN0YXR1c251bSk7DQorDQorICAgIGlmIChXSUZTSUdOQUxFRChzdGF0dXMp KQ0KKwlyZXR1cm4gUXRydWU7DQorICAgIGVsc2UNCisJcmV0dXJuIFFmYWxz ZTsNCit9DQorDQorc3RhdGljIFZBTFVFDQorcmJfZl93dGVybXNpZyhvYmos IHN0YXR1c251bSkNCisgICAgVkFMVUUgb2JqLCBzdGF0dXNudW07DQorew0K KyAgICBpbnQgc3RhdHVzID0gTlVNMklOVChzdGF0dXNudW0pOw0KKw0KKyAg ICByZXR1cm4gSU5UMk5VTShXVEVSTVNJRyhzdGF0dXMpKTsNCit9DQorDQor c3RhdGljIFZBTFVFDQorcmJfZl93aWZleGl0ZWQob2JqLCBzdGF0dXNudW0p DQorICAgIFZBTFVFIG9iaiwgc3RhdHVzbnVtOw0KK3sNCisgICAgaW50IHN0 YXR1cyA9IE5VTTJJTlQoc3RhdHVzbnVtKTsNCisNCisgICAgaWYgKFdJRkVY SVRFRChzdGF0dXMpKQ0KKwlyZXR1cm4gUXRydWU7DQorICAgIGVsc2UNCisJ cmV0dXJuIFFmYWxzZTsNCit9DQorDQorc3RhdGljIFZBTFVFDQorcmJfZl93 ZXhpdHN0YXR1cyhvYmosIHN0YXR1c251bSkNCisgICAgVkFMVUUgb2JqLCBz dGF0dXNudW07DQorew0KKyAgICBpbnQgc3RhdHVzID0gTlVNMklOVChzdGF0 dXNudW0pOw0KKw0KKyAgICByZXR1cm4gSU5UMk5VTShXRVhJVFNUQVRVUyhz dGF0dXMpKTsNCit9DQorDQorI2lmZGVmIFdDT1JFRFVNUA0KK3N0YXRpYyBW QUxVRQ0KK3JiX2Zfd2NvcmVkdW1wKG9iaiwgc3RhdHVzbnVtKQ0KKyAgICBW QUxVRSBvYmosIHN0YXR1c251bTsNCit7DQorICAgIGludCBzdGF0dXMgPSBO VU0ySU5UKHN0YXR1c251bSk7DQorDQorICAgIGlmIChXQ09SRURVTVAoc3Rh dHVzKSkNCisJcmV0dXJuIFF0cnVlOw0KKyAgICBlbHNlDQorCXJldHVybiBR ZmFsc2U7DQorfQ0KKyNlbmRpZg0KKw0KIGNoYXIgKnN0cnRvaygpOw0KIA0K ICNpZmRlZiBIQVZFX1NFVElUSU1FUg0KQEAgLTEwNTMsNyArMTIwNiwxNyBA QA0KICNlbmRpZg0KICNpZm5kZWYgTlQNCiAgICAgcmJfZGVmaW5lX21vZHVs ZV9mdW5jdGlvbihyYl9tUHJvY2VzcywgIndhaXQiLCByYl9mX3dhaXQsIDAp Ow0KKyAgICByYl9kZWZpbmVfbW9kdWxlX2Z1bmN0aW9uKHJiX21Qcm9jZXNz LCAid2FpdGFsbCIsIHJiX2Zfd2FpdGFsbCwgMCk7DQogICAgIHJiX2RlZmlu ZV9tb2R1bGVfZnVuY3Rpb24ocmJfbVByb2Nlc3MsICJ3YWl0cGlkIiwgcmJf Zl93YWl0cGlkLCAyKTsNCisgICAgcmJfZGVmaW5lX21vZHVsZV9mdW5jdGlv bihyYl9tUHJvY2VzcywgIndpZnN0b3BwZWQiLCByYl9mX3dpZnN0b3BwZWQs IDEpOw0KKyAgICByYl9kZWZpbmVfbW9kdWxlX2Z1bmN0aW9uKHJiX21Qcm9j ZXNzLCAid3N0b3BzaWciLCByYl9mX3dzdG9wc2lnLCAxKTsNCisgICAgcmJf ZGVmaW5lX21vZHVsZV9mdW5jdGlvbihyYl9tUHJvY2VzcywgIndpZnNpZ25h bGVkIiwgcmJfZl93aWZzaWduYWxlZCwgMSk7DQorICAgIHJiX2RlZmluZV9t b2R1bGVfZnVuY3Rpb24ocmJfbVByb2Nlc3MsICJ3dGVybXNpZyIsIHJiX2Zf d3Rlcm1zaWcsIDEpOw0KKyAgICByYl9kZWZpbmVfbW9kdWxlX2Z1bmN0aW9u KHJiX21Qcm9jZXNzLCAid2lmZXhpdGVkIiwgcmJfZl93aWZleGl0ZWQsIDEp Ow0KKyAgICByYl9kZWZpbmVfbW9kdWxlX2Z1bmN0aW9uKHJiX21Qcm9jZXNz LCAid2V4aXRzdGF0dXMiLCByYl9mX3dleGl0c3RhdHVzLCAxKTsNCisjaWZk ZWYgV0NPUkVEVU1QDQorICAgIHJiX2RlZmluZV9tb2R1bGVfZnVuY3Rpb24o cmJfbVByb2Nlc3MsICJ3Y29yZWR1bXAiLCByYl9mX3djb3JlZHVtcCwgMSk7 DQorI2VuZGlmDQogDQogI2lmbmRlZiBVU0VfQ1dHVVNJDQogICAgIHJiX2Rl ZmluZV9tb2R1bGVfZnVuY3Rpb24ocmJfbVByb2Nlc3MsICJwaWQiLCBnZXRf cGlkLCAwKTsNCg== --0-548198641-966997954=:30360--