等待不等待所有子进程停止.这是我的脚本:
#!/bin/bash
titlename=`echo "$@"|sed 's/\..\{3\}$//'`
screen -X title "$titlename"
/usr/lib/process.bash -verbose $@
wait
bash -c "mail.bash $@"
screen -X title "$titlename.Done"
Run Code Online (Sandbox Code Playgroud)
我没有访问/usr/lib/process.bash,但它是一个经常更改的脚本,所以我想引用它...但在该脚本中:
#!/bin/ksh
#lots of random stuff
/usr/lib/runall $path $auto $params > /dev/null 2>&1&
Run Code Online (Sandbox Code Playgroud)
我的问题是runall创建了一个日志文件...而mail.bash假设要将该日志文件邮寄给我,但是等待不等待runall完成,它似乎只是等待process.bash完成.无论如何,有没有访问process.bash,或试图保持我自己的最新版本的process.bash,以使等待正确等待runall完成?(日志文件会覆盖以前的运行,所以我不能只检查是否存在日志文件,因为总有一个存在)
谢谢,丹
我对这两个描述非常困惑:
这是我的问题:
我知道Java中的每个对象都有一个锁,但"监视器锁"是什么意思?是否与oject的锁相同?
为什么通知方法需要放弃显示器锁定?
如果我尝试使用以下代码使对象等待:
class simpleTask extends Thread
{
int waitingTime;
public simpleTask(int waitingTime)
{
this.waitingTime = waitingTime;
}
public void run()
{
synchronized(this) // this is a reference of current object
{
try {
this.wait(waitingTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)与上面的第一个描述一样,是指当前对象被synchronized关键字阻塞,然后wait方法释放锁?
我正在阅读wait()Unix系统书中的函数.这本书包含一个程序wait(NULL).我不明白这意味着什么.在其他程序中有
while(wait(NULL)>0)
Run Code Online (Sandbox Code Playgroud)
......这也让我抓狂了头.
任何人都能解释一下上面的功能是做什么的吗?
我该怎么用wait?它让我感到困惑不已.我fork是一个带递归的触发树,现在孩子们必须暂停(等待/睡眠),而我运行pstree,这样我就可以打印proc树了.
我应该用吗?
int status;
wait(&status);
Run Code Online (Sandbox Code Playgroud)
更确切地说
wait(NULL)
Run Code Online (Sandbox Code Playgroud)
我应该把它放在哪里?在父母if(pid > 0)或孩子if(pid==0)?也许在ifs的末尾,所以我将所有pids 存储在数组中然后运行for它们并使用wait?
我的代码模板:
void ProcRec(int index)
{
pid_t pid;
int noChild = getNChild(index);
int i= 0;
for(i = 0; i < noChild; i++)
{
pid = fork();
if (pid > 0)
{
/* parent process */
}
else if (pid == 0)
{
/* child process. */
createProc(index+1);
}
else
{
/* error */
exit(EXIT_FAILURE);
}
}
if(getpid() == …Run Code Online (Sandbox Code Playgroud) 我们来做两个例子:全表扫描导致这个结果:
TOTAL TIME
EVENT WAITS WAITED
------------------------------ ----- ------
db file scattered read 460 13
Run Code Online (Sandbox Code Playgroud)
这是通过非选择性索引范围扫描访问的结果:
TOTAL TIME
EVENT WAITS WAITED
------------------------------ ----- ------
db file scattered read 15 3
db file sequential read 6209 140
Run Code Online (Sandbox Code Playgroud)
我想从非选择性索引中获取许多rowid之后会出现分散的读取.只需一次读取即可读取经过碎片整理的I/O系统上的所有表.
你能解释一下如何阅读这些数据吗?
假设我正在编写一个应用程序,我需要从服务器实时获取通知,并且假设这些通知存储在mysql数据库中.为了让我得到它们,我必须继续轮询mysql服务器(不断重复相同的选择查询,直到我真正得到结果)但我认为这是非常无效的方式这样做,因为大多数时候选择会变为空.如果我经常这样做,它在服务器上是不合理的压力,如果我这样做,很少通知会很晚.所以我想知道是否有办法说一个mysql查询阻止,直到匹配条件的结果变得可用.
list = query ("SELECT * FROM `notifications` WHERE `unread`=1") ;
Run Code Online (Sandbox Code Playgroud)
如果没有未读通知,则不会返回空列表,而是等到实际有未读通知返回
我正在调用我想以同步顺序执行的四个方法,前两个方法是同步的,后两个方法是异步的(从URL获取数据).
伪代码:
- (void)syncData {
// Show activity indicator
[object sync]; // Synchronous method
[object2 sync]; // Synchronous method
BOOL object3Synced = [object3 sync]; // Async method
BOOL object4Synced = [object4 sync]; // Async method
// Wait for object3 and object4 has finished and then hide activity indicator
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我正在尝试创建一个单击页面按钮的脚本,等待X秒(对于发生单击的结果),然后继续.
我怎样才能做到这一点?(只有等待部分)
我编写代码来按顺序打印pidparent->g3->c2->g1->g2->c1.
所以我用过wait(),和waitpid().但我失败了.
所以我写了"完成"代码来了解什么是问题.
而且我知道c1忽略了waitpid并打印了what-> finish.
我怎么解决这个问题
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
void main()
{
pid_t c1,c2,g1,g2,g3;
printf("parent:%d\n", (int)getpid());
c1=fork();
int status;
if (c1>0) {
c2=fork();
if (c2==0) {
g3=fork();
if (g3==0) {
printf("g3:%d\n",(int)getpid());
} else if (g3>0) {
wait(&status);
printf("c2:%d\n",(int)getpid());
}
}
} else if (c1==0) {
waitpid(c2,&status,WUNTRACED);
printf("what\n");
g1=fork();
if (g1>0) {
g2=fork();
if (g2==0) {
printf("g2:%d\n",(int)getpid());
} else if (g2>0) {
waitpid(g1,&status,WUNTRACED);
printf("c1:%d\n", (int)getpid());
}
} else if …Run Code Online (Sandbox Code Playgroud) 我想等待一个函数完成,然后再执行它旁边的函数。我有一个名为getData() 的函数,其中发生了 http 调用,它返回一个 observable。第二个函数checkDuplicate()我们订阅了该函数getData()。我们有第三个函数,称为proceed(),我们在其中调用checkDuplicate()函数,一旦checkDuplicate()函数完成,我们就会调用alert("finished")。但这里的问题是在checkDuplicate()函数完成之前,警报已经被触发。
找到代码以获得更好的说明:
getData(): Observable<any>{
return this.http.get<any>(URL...);
}
checkDuplicate(){
return this.getData().subscribe(response => {
if(response){
console.log("Inside");
}
});
}
proceed(){
this.checkDuplicate();
console.log("finished");
}
Run Code Online (Sandbox Code Playgroud)
实际结果
完成的
里面
预期结果
里面
完成的
我试过asyn/await等待 checkDuplicate() 函数完成。但是还是没有用。如果您分享解决方案,将不胜感激。提前致谢 !!!
wait ×10
c ×2
angular8 ×1
async-await ×1
asynchronous ×1
bash ×1
blocking ×1
browser ×1
cocoa ×1
console ×1
fork ×1
ios ×1
java ×1
javascript ×1
linux ×1
locking ×1
long-polling ×1
mysql ×1
notify ×1
objective-c ×1
observable ×1
oracle ×1
polling ×1
subscribe ×1
ubuntu ×1
unix ×1