当前位置: 首页 > news >正文

手机网站域名查询前端是做什么的?

手机网站域名查询,前端是做什么的?,2008iis7建立网站,企业网站推广成功案例文章目录 一、引言1、进程的概念与重要性2、Linux系统下进程状态的意义3、进程状态与系统性能的关系 二、Linux下进程状态概述1、Linux进程状态的分类2、进程状态信息的获取方法 三、Linux下进程状态详解1、运行状态#xff08;Running#xff09;2、可中断睡眠状态#xff… 文章目录 一、引言1、进程的概念与重要性2、Linux系统下进程状态的意义3、进程状态与系统性能的关系 二、Linux下进程状态概述1、Linux进程状态的分类2、进程状态信息的获取方法 三、Linux下进程状态详解1、运行状态Running2、可中断睡眠状态Interruptible Sleep3、不可中断睡眠状态Uninterruptible Sleep4、停止状态Stopped5、僵尸状态Zombie6、其他状态如死锁、休眠等a.死锁状态的原因与解决方法b.休眠状态的触发与恢复 一、引言 1、进程的概念与重要性 进程是操作系统分配资源的基本单位它包含了程序执行所需的各种资源信息如代码、数据、系统资源等。每个进程在系统中都是独立存在的拥有自己的地址空间和运行状态。进程是程序执行的一个实例通过进程我们可以实现多任务的并发执行提高系统的利用率和响应速度。 在Linux系统中进程的重要性不言而喻。Linux是一个多用户、多任务的操作系统它允许多个进程同时运行并通过进程间的通信和同步机制实现各种复杂的功能。因此理解和管理进程是Linux系统管理的核心任务之一。 Linux下的进程 task_struct 可执行程序的代码和数据。但是进程不是一直在运行的可能在等待某种硬件资源例如等待你的输入。就算进程放在了CPU上也不是一直运行的可能是在等待某种软硬件资源。排队一定是在等待某种“资源”。只要是排队一定是进程的task_struct去排队 2、Linux系统下进程状态的意义 在Linux系统中每个进程都有一个当前的状态这个状态描述了进程当前的执行情况和资源占用情况。进程状态的变化反映了系统资源的分配和使用情况也影响了系统的性能和稳定性。 通过监控和管理进程状态我们可以了解系统的负载情况、资源使用情况以及进程的执行效率。这对于系统管理员来说是非常重要的他们可以根据进程状态调整系统配置、优化资源利用、解决性能瓶颈等问题。 3、进程状态与系统性能的关系 进程状态与系统性能密切相关。一个运行良好的系统应该能够合理地分配和管理资源使进程能够高效地执行。如果系统中存在过多的阻塞或休眠状态的进程那么系统的响应速度可能会变慢甚至导致系统崩溃。 另一方面如果系统中的进程都处于运行状态但资源分配不合理那么也可能导致系统性能下降。例如某些进程可能占用了过多的CPU或内存资源导致其他进程无法获得足够的资源而执行缓慢。 因此了解进程状态与系统性能的关系可以帮助我们更好地管理系统、优化性能确保系统的稳定运行。 二、Linux下进程状态概述 1、Linux进程状态的分类 在Linux系统中进程状态是多种多样的它们各自代表了进程的不同执行阶段和资源占用情况。这些状态可以大致分为几类 为了弄明白正在运行的进程是什么意思我们需要知道进程的不同状态。一个进程可以有几个状态在 Linux内核里进程有时候也叫做任务。 下面的状态在kernel源代码里定义 static const char *task_state_array[] {R (running), S (Sleeping), D (disk sleep), T (stopped), T (tracing stop), Z (zombie), X (dead) }可执行状态R进程正在运行或准备在CPU上运行。这通常表示进程处于可执行状态等待获得CPU资源以执行其代码。可中断的睡眠状态S进程处于可中断的睡眠状态。这意味着进程正在等待某个条件成立比如等待I/O操作完成。在这种状态下进程可以被信号唤醒。不可中断的睡眠状态D进程处于不可中断的睡眠状态。这通常发生在进程需要访问磁盘或执行其他不允许被中断的操作时。在这个状态下进程不会响应任何信号直到它完成操作。暂停状态T当进程接收到SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU信号时它会进入此状态。在这个状态下进程暂停执行直到接收到SIGCONT信号才会恢复。进程已停止执行。这通常发生在进程接收到某些信号如SIGSTOP时或者当它被调试器暂停时。跟踪状态T即 tracing stop这个状态与上一个类似但它特指当进程被调试器跟踪并暂停时的状态。在某些上下文中它可能是一个更具体的状态描述用于区分普通的停止状态和由于调试而停止的状态。僵尸状态Z僵尸进程。这是一个已经结束执行但尚未被其父进程回收的进程。僵尸进程不占用任何系统资源除了进程表中的一个条目但如果不被清理它们会占用进程ID空间。进程已结束执行但其父进程尚未回收其资源。这是一个短暂的状态通常很快就会结束。死亡状态X进程已经结束执行并且其所有资源都已被系统回收。这是进程生命周期的终点。 这个数组通常用于与进程状态代码进行映射以便在程序或脚本中能够以人类可读的方式显示进程状态。例如当读取/proc/[pid]/status文件或其他与进程状态相关的系统信息时可以使用这个数组来将状态代码转换为对应的描述性字符串。 2、进程状态信息的获取方法 在Linux系统中我们可以通过多种方式来获取进程的状态信息。其中最常用的方法是通过命令行工具来查看进程状态。 ps命令这是最常用的查看进程状态的命令。ps 是“process status”的缩写。通过ps命令我们可以查看当前系统中所有进程的状态、PID、CPU占用率、内存占用等信息。例如使用“ps aux”命令可以以简单列表的形式显示所有用户的所有进程信息。top命令这个命令可以实时显示系统中各个进程的资源占用状况类似于Windows的任务管理器。通过top命令我们可以动态地观察进程状态的变化以及CPU、内存等系统资源的使用情况。 此外我们还可以通过读取/proc文件系统来获取进程状态信息。/proc文件系统是Linux内核提供的一个虚拟文件系统它包含了大量关于系统运行状态的信息包括进程状态。通过读取/proc/[pid]/status文件我们可以获取指定进程的详细状态信息。 我们通常可以使用 while :; do ps ajx | head -1 ps ajx | grep myprocess | grep -v grep ; sleep 1; done这样每秒钟可以打印一次当前系统中所有进程的表头以及名为“myprocess”的进程的状态信息同时排除搜索命令本身产生的进程信息。这样你可以实时地监控“myprocess”进程的状态而不会被其他无关的进程信息干扰。 其中ps ajx这是Linux中用来显示当前系统中所有进程的命令。用于报告当前系统的进程状态。ajx 是该命令的选项其中 a 表示显示所有用户的所有进程。j 表示显示与作业控制相关的信息。x 表示显示没有控制终端的进程 三、Linux下进程状态详解 进程状态是操作系统中描述进程当前状况的重要属性它反映了进程在执行过程中的不同阶段和情况。不同的状态对应着进程不同的行为和能力。 1、运行状态Running 在Linux系统中进程的运行状态表示进程当前正在占用CPU资源并执行其代码。 进程正在执行 当进程处于运行状态时它正在CPU上执行其指令。这意味着进程已经获得了CPU的时间片并且正在使用CPU的计算能力来完成其任务。在单核CPU系统中一次只能有一个进程处于运行状态而在多核CPU系统中可以同时有多个进程在不同的核心上运行。 CPU时间片的分配 Linux操作系统使用调度器来管理CPU时间的分配。调度器根据进程的优先级、系统的负载情况以及其他调度策略决定哪个进程应该获得下一个CPU时间片。时间片是CPU分配给进程执行的时间单元当进程的时间片用完时调度器会保存进程的当前状态上下文并将其置于就绪队列中等待下一次调度。 我们用代码演示一下 #include stdio.h #include unistd.h int main() {while (1){}return 0; }我们可以观察到我们的进程处于R状态也就是运行状态。 那么R后面的“”是什么意思呢 在Linux系统中进程状态“R”表示该进程正在运行状态并且该进程在前台运行。这里的“R”代表运行状态Running而“”表示进程在前台运行。前台运行的进程意味着它会占用终端且当你在命令行中输入指令如ls或pwd时这些指令的输出结果不会被显示因为终端被前台运行的进程所占用。然而前台运行的进程可以通过Ctrlc来终止。 请注意这与后台运行的进程不同后台运行的进程不会占用终端你可以在终端中输入其他指令并获得输出结果但后台进程不能通过Ctrlc来结束通常需要使用kill命令来终止。 为了查看进程的状态你可以使用ps命令并结合其他选项来获取更详细的信息。例如ps aux命令可以显示所有用户的所有进程信息包括进程状态。在输出中你可以看到STAT列其中包含了进程的当前状态。如果你看到“R”那就意味着该进程正在前台运行。 ./work #运行后台进程 其状态为 S R等没有“” 含加号的状态为前台进程 不含为后台进程。在Linux命令行中./work 这个命令的用途是将名为 work 的脚本或程序在后台运行。这里的 ./ 表示当前目录work 是你要执行的脚本或程序的文件名而 符号用于在单个命令行中串联多个命令并将 work 进程放到后台执行。 当使用 符号连接命令时第一个命令在这里是 ./work执行完毕后无论其结果如何随后的命令如果有的话都会执行。但是由于这里只有一个命令 ./work并且后面跟着 所以这个命令会在后台启动并运行而不会阻塞命令行终端。 这意味着你可以启动 work 进程并立即在命令行中输入并执行其他命令而不需要等待 work 进程完成。这对于需要长时间运行的任务特别有用因为它允许你在等待任务完成的同时继续在命令行中进行其他操作。 需要注意的是虽然 work 进程在后台运行但你仍然可以通过其他命令如 jobs、fg、bg 和 kill来查看、控制或终止这个进程。 2、可中断睡眠状态Interruptible Sleep 在Linux系统中进程的可中断睡眠状态Interruptible Sleep是其生命周期中的一个重要阶段通常发生在进程等待某些资源或条件成立时。以下是关于可中断睡眠状态的详细解释 等待I/O操作 当进程需要执行输入/输出I/O操作时如从磁盘读取文件或向网络发送数据它可能会进入可中断睡眠状态。这是因为I/O操作通常涉及等待硬件设备的响应这个过程可能需要一些时间。在此期间进程会释放CPU允许其他进程获得执行机会。 信号中断与唤醒 处于可中断睡眠状态的进程可以被信号signal中断。在Linux中信号是一种用于进程间通信和进程管理的机制。当进程接收到某些信号如SIGKILL或SIGTERM时它可能会被终止或执行其他操作。对于处于可中断睡眠状态的进程特定的信号如SIGINT可以将其唤醒使其返回就绪状态并继续执行。 与不可中断睡眠状态的区别 可中断睡眠状态与不可中断睡眠状态的主要区别在于它们对信号的响应方式。处于不可中断睡眠状态的进程不会响应任何信号直到它完成当前的操作或主动退出该状态。这通常是因为进程正在执行一些关键任务如磁盘I/O操作或某些系统调用这些任务不能被中断否则可能会导致数据损坏或系统不稳定。 相比之下可中断睡眠状态的进程在等待资源或条件成立时可以被信号唤醒并中断其等待状态。这使得系统管理员或其他进程能够更灵活地管理和控制这些进程的执行。 #include stdio.h #include unistd.h int main() {int a;scanf(%d, a); }ctrl c 可以中断处于s状态的进程因此Linux中把s状态称为可中断睡眠浅度睡眠。 3、不可中断睡眠状态Uninterruptible Sleep 在Linux系统中进程的不可中断睡眠状态Uninterruptible Sleep是一种特殊的进程状态它通常发生在进程等待某些关键资源或执行不能被中断的操作时不能被信号唤醒。 在Linux中对应D (disk sleep)状态。 等待关键资源 当进程需要等待某些关键资源如磁盘I/O操作或特定的硬件交互时它可能会进入不可中断睡眠状态。这些资源通常是系统正常运行所必需的因此进程需要确保在资源可用之前保持等待状态而不会被其他因素打断。 无法被信号中断 与可中断睡眠状态不同处于不可中断睡眠状态的进程无法被任何信号中断。这意味着即使系统管理员或其他进程发送了终止或中断信号该进程也会继续保持在不可中断睡眠状态直到等待的资源变得可用或操作完成。这种特性确保了进程在关键任务执行期间的连续性和稳定性。 常见的不可中断睡眠场景 不可中断睡眠状态通常出现在以下场景中 磁盘I/O操作当进程执行磁盘读写操作时为了确保数据的一致性和完整性它可能会进入不可中断睡眠状态直到I/O操作完成。硬件交互当进程与硬件设备进行交互如网络适配器或存储设备时也可能进入不可中断睡眠状态。这是因为硬件操作通常需要一些时间来完成并且不能被外部因素中断。系统调用某些系统调用可能导致进程进入不可中断睡眠状态特别是那些涉及底层硬件操作或系统资源的调用。 需要注意的是虽然不可中断睡眠状态确保了进程在关键任务执行期间的稳定性但如果系统或硬件发生故障进程可能会长时间保持在不可中断睡眠状态导致系统资源无法得到有效利用。 4、停止状态Stopped 进程被暂停执行 停止状态Stopped是指进程被暂停执行的状态。当进程接收到某种特定的信号如SIGSTOP、SIGTSTP等时它会被操作系统暂停执行进入停止状态。这种状态下进程不会占用CPU资源也不会执行任何操作直到接收到继续执行的信号如SIGCONT为止。 信号控制 信号控制是操作系统中的一种机制用于在不同的进程之间传递信息或请求。通过发送特定的信号操作系统可以请求进程执行某些操作如暂停、恢复、终止等。在停止状态中信号控制起到了关键作用它使得进程能够响应外部请求而进入或退出停止状态。 与僵尸状态的区别 进程状态在停止状态下进程虽然被暂停执行但仍然存在于内存中并保留其上下文信息如程序计数器、寄存器等。而僵尸状态则是进程已经终止但其相关资源如进程描述符还未被操作系统完全释放的状态。资源占用停止状态的进程仍然占用系统资源如内存而僵尸状态的进程除了进程描述符外不再占用其他资源。恢复能力停止状态的进程可以通过接收继续执行的信号来恢复执行。而僵尸状态的进程无法恢复执行因为它已经终止。产生原因停止状态通常是由于进程接收到特定的暂停信号而产生的。而僵尸状态则是由于进程终止后其父进程未能及时回收其资源而导致的。 “T (stopped)”, 让进程处于暂停状态是一种阻塞状态 #include stdio.h #include unistd.h int main(){while (1){printf(hello process, pid :%d !\n, getpid());sleep(1);}return 0; }kill -19 pid SIGSTOP 后进程处于 T 状态。 下面我们重新运行程序 kill -18 pid SIGCONT进程重新运行且由前台转为后台处于S状态 “T (tracing stop)”同样是暂停状态有一种被追踪的属性。调试过程中代码所处的状态(被追踪的状态)是一种阻塞状态 #include stdio.h #include unistd.hint main() {printf(hello world!\n);sleep(10);int a 0;scanf(%d, a);printf(a %d \n, a);return 0; }即下图中的 t 状态 5、僵尸状态Zombie 僵尸状态Zombie是进程结束后的一个特殊状态。当一个进程完成它的工作并终止时它的父进程需要调用wait()或waitpid()系统调用来取得子进程的终止状态。如果子进程退出而父进程并没有调用这些系统调用来获取子进程的状态信息那么子进程的进程描述符仍然会保留在系统中这种进程就被称为僵尸进程。 简单说Z状态的进程已经死亡但是需要维持住代码和数据可以释放。但pcb不能直接释放因为pcb内含进程退出信息需要父进程读取。 进程结束后的状态 在进程退出时内核会释放该进程占用的所有资源如打开的文件、占用的内存等。但是为了父进程能够获取子进程的退出状态内核仍然会为子进程保留一定的信息如进程号、退出状态和运行时间等。这些信息会一直保留在进程表中直到父进程通过调用wait()或waitpid()来获取。 资源释放与进程描述符 僵尸进程的存在可能会带来一些问题因为它们占用了进程表中的位置如果父进程一直不处理这些僵尸进程那么进程表可能会被填满导致无法创建新的进程。因此处理僵尸进程是很重要的。 僵尸进程的处理方法 使用wait()或waitpid()系统调用父进程可以通过这些系统调用来等待子进程的终止并获取子进程的终止状态。当父进程调用这些系统调用时子进程的状态信息会被完全清除从而不再是僵尸进程。使用信号处理当子进程终止时会发送SIGCHLD信号给父进程。父进程可以设置一个信号处理函数在该函数中调用wait()或waitpid()来处理子进程的终止状态。 为了避免僵尸进程的产生通常建议开发者在编写程序时确保父进程能够正确地处理子进程的退出状态及时调用wait()或waitpid()来获取子进程的终止状态。同时也可以使用一些工具和库来帮助管理进程如使用守护进程daemon来监控和管理子进程的状态。 因此“Z (zombie)” 是一种死亡状态。 #include stdio.h #include stdlib.h #include unistd.hint main() {pid_t id fork();if (id 0){int cnt 5;while (cnt){printf(I am child, pid: %d, ppid: %d\n, getpid(), getppid());sleep(1);cnt--;}exit(0); // 让子进程直接退出}while (1){printf(I am parnet, pid: %d, ppid: %d\n, getpid(), getppid());sleep(1);}return 0; }那么为什么要有僵尸状态的进程呢 在Linux系统中Z状态是进程生命周期中的一个特定阶段。这个状态的存在主要基于以下几个原因 父进程与子进程的同步在Linux系统中当一个子进程结束时它不会立即从系统中消失。相反它会变成一个僵尸进程等待其父进程来回收它。这样做是为了确保父进程能够获取到子进程的退出状态和其他相关信息。这是父进程与子进程之间同步的一种方式。资源管理虽然僵尸进程已经不再执行任何代码且其大部分资源如内存和打开的文件已经被系统释放但它们仍然会占用进程表中的一个条目。这个条目主要用于存储子进程的退出状态和其他必要信息以便父进程可以查询。通过这种方式系统能够更有效地管理进程资源避免资源的无序释放和潜在的数据丢失。异常处理Z状态的存在也帮助系统处理异常情况。例如如果一个父进程在子进程退出之前突然崩溃或被杀死那么没有Z状态的话子进程的退出状态和其他信息可能会丢失。通过保持子进程在Z状态系统可以在父进程恢复或新的父进程接管时提供这些信息。 总的来说Z状态僵尸状态在Linux系统中起到了确保父进程与子进程之间的同步、有效管理进程资源以及处理异常情况的作用。然而也需要注意的是如果父进程没有正确地处理其子进程的僵尸状态可能会导致系统进程表被填满从而无法创建新的进程。因此在编写程序时开发者需要确保父进程能够正确地处理子进程的退出状态及时回收僵尸进程。 创建进行是希望这个进程给用户完成工作的。子进程必须有结果数据PCB中的。 那么就引出另外一个问题。 那么如果父进程不读取僵尸进程的状态呢 僵尸状态的进程会一直存在。task_struct对象也要一直存在都是要占据内存的。内存泄漏。 首先僵尸进程虽然不再占用CPU或内存资源执行代码但它们仍然会占用进程表中的一个条目。这个条目包含了关于子进程的一些重要信息如进程ID、终止状态码、运行时间等。如果父进程不读取这些信息并释放僵尸进程所占用的进程表条目那么随着时间的推移进程表中可能会积累大量的僵尸进程。 当进程表被大量僵尸进程填满时系统就无法再创建新的进程因为已经没有足够的空间来存储新进程的条目。这会导致系统无法正常运行甚至可能引发更严重的问题。 此外由于僵尸进程的信息一直保留在进程表中这也意味着子进程的一些状态信息可能无法得到正确的处理。例如如果子进程在退出前产生了一些需要清理的资源如临时文件、锁等而父进程没有读取到子进程的退出状态并相应地执行清理操作那么这些资源可能会一直被占用导致资源浪费或潜在的安全问题。 因此我们可以知道进程最后都得经过Z状态所有的进程退出时必须先到Z状态状态读取完成后才会变成X状态死亡。 通常僵尸进程的原因在于该进程应该已经执行完毕或是应该终止了但是该进程的父进程却无法完整地将该进程结束掉而造成该进程一直存在内存当中。如果发现某个进程的CMD后面接上了defunct时就代表该进程是僵尸的。 那么如果父进程先于子进程结束会造成什么后果 我们用代码观察一下 #include stdio.h #include stdlib.h #include unistd.hint main() {pid_t id fork();if (id 0){int cnt 500;while (cnt){printf(I am child, pid: %d, ppid: %d\n, getpid(), getppid());sleep(1);cnt--;}exit(0); // 让子进程直接退出}int cnt 5;while (1){cnt--;printf(I am parnet, pid: %d, ppid: %d\n, getpid(), getppid());sleep(1);}return 0; }父进程先结束子进程变为孤儿被1号进程领养。一个进程被领养时变成孤儿进程会从S变为S后台进程无法ctrlc结束。 当父进程结束时子进程并不会随之结束而是会成为孤儿进程。 孤儿进程是指其父进程已经终止或被终止而该进程本身还在运行的进程。在Linux中init进程PID为1的进程会负责接管所有的孤儿进程成为它们的父进程。因此即使原始父进程结束孤儿进程仍然会在系统中运行直到它们自己正常结束或被终止。 init进程会周期性地调用wait()或类似的系统调用来回收已结束的孤儿进程的资源并释放它们在进程表中所占用的条目。这样即使原始父进程没有处理子进程的僵尸状态系统也能够确保资源得到正确回收避免进程表被填满。 需要注意的是虽然init进程会接管孤儿进程并处理它们的结束状态但这并不意味着孤儿进程的行为是完全无害的。孤儿进程可能会继续执行一些操作包括打开文件、占用系统资源等。因此在编写程序时我们应该尽量避免创建可能成为孤儿进程的子进程或者确保子进程在父进程结束前能够正确清理自己的资源并安全退出。 总结来说当父进程先结束时子进程会成为孤儿进程由init进程接管并处理其结束状态。 6、其他状态如死锁、休眠等 a.死锁状态的原因与解决方法 死锁状态通常发生在多线程或多进程环境中当两个或更多的线程/进程互相等待对方释放资源时就会形成死锁。具体的原因包括 竞争资源当多个线程/进程试图同时访问同一资源时如果没有适当的同步机制就可能发生死锁。例如线程A持有资源1并请求资源2而线程B持有资源2并请求资源1这时两者都无法继续执行形成死锁。进程间推进顺序非法进程执行顺序不当也可能导致死锁。例如进程P1需要资源R1和R2进程P2也需要这两个资源如果P1先获得了R1P2先获得了R2然后P1请求R2P2请求R1这时两者都会阻塞形成死锁。 解决方法 避免通过设计合理的资源访问顺序和同步机制预防死锁的发生。例如可以规定线程/进程必须按照特定的顺序请求资源。检测通过算法检测系统中是否存在死锁。一旦检测到死锁可以采取相应的措施进行解决。解除当检测到死锁时需要采取措施解除死锁。这可能包括终止某些进程/线程或者强制释放某些资源。 b.休眠状态的触发与恢复 触发 休眠状态是计算机系统为了节省能源或快速恢复工作状态而采取的一种状态。当系统进入休眠状态时它会将当前的工作状态包括内存中的数据保存到硬盘上然后关闭大部分硬件设备的电源。这样当系统需要恢复工作时它可以快速地从硬盘上加载之前保存的状态而不需要重新启动系统。 恢复 当系统从休眠状态恢复时它会从硬盘上读取之前保存的工作状态并加载到内存中。这样系统就可以快速地恢复到之前的工作状态用户可以继续之前的工作而不需要重新打开应用程序或恢复文件。 需要注意的是虽然休眠状态可以节省能源并快速恢复工作状态但在休眠期间如果系统断电或硬盘损坏可能会导致数据丢失或系统无法恢复。因此在使用休眠功能时需要确保系统的电源稳定并定期对硬盘进行备份和维护。
http://www.zqtcl.cn/news/929521/

相关文章:

  • 怎么做微网站推广做一个自己的网站需要什么
  • 一个静态网站开发考虑什么最近一周新闻热点回顾
  • 北京网站设计知名乐云seo汝州建设局网站
  • 珠海左右创意园网站开发注册安全工程师报名条件和要求
  • 建设文明网站包括怎么用手机建设网站
  • 网站建设商城宁波seo深度优化平台有哪些
  • 免费企业查询网站网站建设有关的职位
  • 有哪些网站是可以做会计题目的广告网站建设设计
  • 房地产项目网站建设wordpress codecolorer
  • 网站服务器机房html5写的网站有什么好处
  • 三网合一网站源码下载宣传片拍摄手法及技巧
  • 重庆有网站公司公司做网站能抵扣进项税吗
  • 深圳南山网站开发卖东西的网站怎么建设
  • 网站开发教程全集网站内外链建设
  • 购物网站排名数商云科技
  • 哪种网站百度网盘登录入口官网
  • 做淘宝网站多少钱wordpress 七牛云存储
  • 做淘宝网站多少钱江苏省建设厅网站建筑电工证
  • 深圳网站建设 贴吧广州档案馆建设网站
  • 专注网站建设电商商城网站建设
  • 黄石专业网站建设推广一起做网店 网站打不开
  • 网站session 验证江西星子网
  • 成都高校网站建设服务公司小树建站平台
  • 宁波网站建设 慕枫科技顺德网站设计制作
  • 企业网站如何宣传wordpress 链接修改插件
  • 站长工具官网查询视频网站建设工具
  • 建设彩票网站制作网站服务器
  • 购物网站建设网站怎么购买国外的域名
  • 在线网站排名工具跨境电商卖什么产品最赚钱
  • 电商网页设计网站什么是网络营销产生的现实基础